本篇是第三章神经网络的随笔,括号中的内容常表示个人对于该概念的理解。
上一篇介绍了感知机和多层感知机,尽管多层感知机能够实现复杂的计算,但是感知机中的权重的设定和选择是通过人工设定的。神经网络就是为了解决这一问题,神经网络的重要性质是它可以自动地从数据中学习到合适的权重参数。
1. 从感知机到神经网络神经网络用图表示的话可以表示为:
图1
如图,我们将最左边的一列称为输入层,最右边的称为输出层,中间一列称为中间层,中间层有时候又称为隐藏层,隐藏层和输入输出不同是肉眼不可见的。这三个层也可称为第0层,第1层,第2层。尽管图形看着有3层,但是有权值的神经元只有2层,通常根据权值层数称呼神经元的层数,因此上图神经网络又称为2层网络。
在第一篇的感知机介绍中知道,感知机通过接收多个输入信号,神经元汇总所有输入的权重乘积并输出一个输出信号。如下图所示:
0) end{cases}" src="https://latex.codecogs.com/gif.latex?y%20%3D%20%5Cbegin%7Bcases%7D%200%20%26%20%28w0%20*%20x0%20+%20w1*%20x1%20+%20b%20%5Cleqslant%200%29%20%5C%5C%201%20%26%20%28w0%20*%20x0%20+%20w1*%20x1%20+%20b%20%3E%200%29%20%5Cend%7Bcases%7D" />
y的输出主要受()的影响假设,x = 该公式又可表示为:
0) end{cases}" src="https://latex.codecogs.com/gif.latex?h%28x%29%20%3D%20%5Cbegin%7Bcases%7D%200%20%26%20%28x%20%5Cleqslant%200%29%20%5C%5C%201%20%26%20%28x%20%3E%200%29%20%5Cend%7Bcases%7D" />
2.激活函数像这种接收将输入信号的总和转换为输出信号的函数一般称为激活函数。激活函数的作用在于决定如何激活输入信号的总和。但是像这种当输入超过某个阈值(上述公式中的阈值为0),就切换输出的函数称为“阶跃函数”(当x超过阈值时,h(x)输出计算方式就不一样了,前后输出不连续,在数学中通常称为分段函数)
常用的激活函数为:sigmoid, relu等,sigmoid的计算公式和函数图像分别为:
sigmoid函数公式 sigmoid函数图像
由图可知,sigmoid与阶跃函数的区别:1. sigmoid的输出是根据输入x的变化产生连续变化。而阶跃函数的输出在x > 0 时发生显著变化,和x = 0的取值并不是连续的。2. sigmoid的输出虽然在0~1之间,数据是连续变化的,但是h(x) 阶跃函数却只能取0或者1。
sigmoid与阶跃函数的相同点:1. 都是非线性函数; 2. 输出均在0 ~ 1之间
线性函数:输出是输入的整数倍;函数图像是一条直线。
3. 三层神经网络的实现假设实现如下图所示的2层神经网络可以,可以通过矩阵乘的方式。
图2
因为每个神经元的输出是通过所有输入信号的总和计算得来的,而矩阵乘法可以达到这个效果,例如下: W为权值,X 为输入, S 为隐藏层,则 从输入到隐藏层的计算可以表示为:
注意这里对于数据的表示使用的矩阵的形式表示,也可以理解为多维数组。这里使用的W * X 的计算公式是为了和之前的计算公式保持一致,将权重放到前面,这样也就要确定了W中的权重数据排列,矩阵乘法通常不具有交换律。因此S = W * X 中的W 和X 不能交换位置。
根据上图的展示可以发现,对于权值的表示使用的是上标 + 下标2 两种方式,例如中的(1)表示权重和神经元的层号(第1层的权重), 下标11中的前一个1 表示后一层第1个神经元, 第二个1表示前一层的第1个神经元,注意保证w下标中第二个坐标和输入坐标保持一致就可以了,我这里就总是搞混乱。
输出层的处理:神经网络可以用到分类问题或者回归问题上面,不过需要根据实际的问题选择激活函数,通常回归问题(根据某个输入预测一个 [连续的] 数值问题)使用恒等函数,分类问题(数据属于哪一类)用softmax函数。
恒等函数是直接将汇总的输入之和(w1 * x1 + w2 * x2 + b 的结果)直接返回。分类问题可以使用softmax函数。
softmax函数的计算公式:
由于softmax中含有exp操作,我们直到exp是一个单调递增的函数,当x 很大的时候 exp(x)是很大的,就可能会操作硬件的表示范围出现数据溢出的情况,从而导致计算错误。为了避免这种情况,通常在实现softmax的时候会使用如下计算公式:
此处的C可以为任意常数,通常会使用输入信号中的最大值,通过上述推导可以发现是等价的。注意尽管是等价的,但是计算流程多了 求Max操作和 乘法操作,会导致softmax的性能差与之前的形式。
softmax函数特征:
softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值得总和是1。正是因为输出总数为1的特质,我们才可以把softmax函数的输出解释为“概率”。
总结:
神经网络中的激活函数使用平滑变化的sigmoid函数和ReLU函数通过巧妙地使用Numpy函数可以高效地实现神经网络机器学习的问题大体可以分为回归问题和分类问题。关于输出层的激活函数,回归问题中一般使用恒等函数,分类问题中通常使用softmax函数分类问题中,输出层的神经元数量设置要为分类的类别数输入数据的集合称为批。通过以批为单位进行推理处理,能够实现高速的运算。



