概述
简而言之,神经网络就是函数:输入数据,输出结果。
函数
我们以MNIST 手写数字图像识别为例,来定义一下对应的函数形式:
- 任务类型:图像分类
- 输入:一张图像包含 28 x 28=784 个像素,每个像素用一个实数表示
- 输出:0-9
- 任务描述:从图像中识别出唯一的数字
- 函数定义
y=f(x1,x2,...,x784)xi∈R,i=1,...,784y∈{0,1,...,9}
这是神经网络的一个入门级应用,输入是一张低分辨率(28 x 28)的黑白图片,对应的是一个拥有 784 个输入变量的函数。如果是一张百万像素的彩色图片,对应的输入变量就会达到 300 万个。
由此可见,用神经网络解决的都是一些复杂的问题,对应的也是复杂的函数。实现算法就是要构造对应的函数。
如此复杂的函数如何构造呢?我们可以从简单的函数开始,最简单且最成功的的例子就是数字电路。
数字电路
数字电路是计算机的基石,构建了我们庞大的数字世界。但是其核心却是由与、或、非逻辑门所构成。
什么是逻辑门?其实就是函数。而且都是最简单的函数。
| 逻辑门 | 表达式 | 函数形式 |
|---|
| 与门 AND | x∧y | z=∧(x,y) |
| 或门 OR | x∨y | z=∨(x,y) |
| 非门 NOT | ¬x | y=¬(x) |
- 变量类型:都是布尔变量,只有 2 个值:{T,F},远比自然数(N)、实数(R)简单。
- 变量数:一元或二元函数,也是最简单的函数形式
- 函数表示:使用真值表进行描述。为什么不用图像呢?因为是离散函数,在图像上是一些孤立的点,不太好看。
非门NOT
| x | ¬x |
|---|
| T | F |
| F | T |
与门AND、或门OR
| x | y | x∧y | x∨y |
|---|
| T | T | T | T |
| T | F | F | T |
| F | T | F | T |
| F | F | F | F |
组合逻辑门
将简单的逻辑门进行组合,可以获得更强大的函数。
构造新的二元函数:
- 异或: x⊕y=(x∧¬y)∨(¬x∧y)
- 同或: x⊙y=(x∧y)∨(¬x∧¬y)
构造多元函数:
- 3 位与: f(x,y,z)=x∧y∧z
- 8 位加法器: f(x1,...,x8,y1,...,y8)
- 32 位加法器: f(x∗1,...,x∗32,y∗1,...,y∗32)
- 它是一个包含 64 个布尔变量的 64 元函数
- 也可以看做是 32 位整形的 2 元函数: f(x,y)x,y∈Int32
总结
通过对简单逻辑门函数的复合,可以构造新的逻辑函数。包括 32 位整数的加减乘除等操作,32 位单精度浮点型的操作等。
编程语言
再来看编程语言。以 Python 为例,看看 Python 中的元素。
操作符
| 名称 | 符号 | 函数 |
|---|
| 逻辑操作符 | and or not | 二元、一元逻辑函数 |
| 算术操作符 | +, -, *, /, %, **, // | 二元函数 |
| 比较操作符 | ==, !=, >, <, >=, <= | 二元函数 |
| ... | | |
以浮点数加法操作符(+)为例,其函数图像如下:
f(x,y)=x+y
函数
在 Python 可以自行定义函数:
def f(x, y):
return max(0, 2*x + 3*y - 3)
这里定义了一个新的函数,它使用"+,-,*,max"等函数,构造出了新的函数,构造的方式也是通过函数的复合。
总结
编程语言中到处都是函数。通过对基础函数的复合,可以构造出新的函数,得到新的算法。
神经网络
神经网络也是函数。像数字电路和编程语言中一样,它也是由简单的函数复合而成。数字电路的基本单位是与、或、非门等逻辑函数,编程语言中的基本单位是各种操作符等函数,而神经网络的基本单位则是神经元。
神经元
那什么是神经元呢?生物神经元是一个细胞,有输入的树突,有输出的轴突。而神经网络上的神经元是人工神经元,它也是一个函数,更准确地说,它是一类函数。
神经元的输入数量是可以变化的,也就是说它代表的是一个n元函数f(x1,...,xn),而不同神经元的n是可以不同的。
神经网络
神经元之间相互组合,就构成了神经网络。如下图所示:
该神经网络包含三个神经元(不计算输入神经元):
- f1(x1,...,xn)
- f2(x1,...,xn)
- f3(x1,x2)
神经网络所代表的函数为:
f(x1,...,xn)=f3(f1(x1,...,xn),f2(x1,...,xn))
总结
- 数字电路(硬件)的核心是函数,其基础函数是与或非逻辑门函数;
- 编程语言(软件)的核心是函数,其基础函数是各种操作符函数和编程语言中内置的函数(由硬件提供或复合而成);
- 神经网络的核心也是函数,其基础函数是神经元函数;
- 通过对简单函数的复合可以构造新的函数,神经网络就是由神经元函数通过函数的复合操作构造出来的函数。
问题
神经元所代表的函数到底是什么?
只知道是个n元函数可不够,数字电路中的基本单元与、或、非门可都是列出了真值表,画出了图像的,而神经元呢?