深层神经网络
深度学习与深层神经网络
激活函数实现去线性化
-
神经元结构的输出为所有输入的加权和,这导致整个神经网络是一个线性模型。如果将每一个神经元(也就是神经网络中的节点)的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,这个非线性函数就是激活函数。
-
加入偏置项和激活函数的神经元结构示意图:
-
神经网络结构加上激活函数和偏置项后的前向传播算法的数学定义: A 1 = [ a 11 , a 12 , a 13 ] = f ( [ x 1 , x 2 ] [ W 11 ( 1 ) , W 12 ( 1 ) , W 13 ( 1 ) W 21 ( 1 ) , W 22 ( 1 ) , W 23 ( 1 ) ] + [ b 1 , b 2 , b 3 ] ) = f ( [ W 11 ( 1 ) x 1 + W 21 ( 1 ) x 2 + b 1 , W 12 ( 1 ) x 1 + W 22 ( 1 ) x 2 + b 2 , W 13 ( 1 ) x 1 + W 23 ( 1 ) x 2 + b 3 ] ) = [ f ( W 11 ( 1 ) x 1 + W 21 ( 1 ) x 2 + b 1 ) , f ( W 12 ( 1 ) x 1 + W 22 ( 1 ) x 2 + b 2 ) , f ( W 13 ( 1 ) x 1 + W 23 ( 1 ) x 2 + b 3 ) ] A_1=[a_{11},a_{12},a_{13}]=f([x_1,x_2]\begin{bmatrix} W_{11}^{(1)},&W_{12}^{(1)},&W_{13}^{(1)}\\W_{21}^{(1)},&W_{22}^{(1)},&W_{23}^{(1)}\end{bmatrix}+[b_1,b_2,b_3])=f([W_{11}^{(1)}x_1+W_{21}^{(1)}x_2+b_1, W_{12}^{(1)}x_1+W_{22}^{(1)}x_2+b_2, W_{13}^{(1)}x_1+W_{23}^{(1)}x_2+b_3])=[f(W_{11}^{(1)}x_1+W_{21}^{(1)}x_2+b_1), f(W_{12}^{(1)}x_1+W_{22}^{(1)}x_2+b_2), f(W_{13}^{(1)}x_1+W_{23}^{(1)}x_2+b_3)] A1=[a11,a12,a13]=f([x1,x2][W11(1),W21(1),W12(1),W22(1),W13(1)W23(1)]+[b1,b2,b3])=f([W11(1)x1+W21(1)x2+b1,W12(1)x1+W22(1)x2+b2,W13(1)x1+W23(1)x2+b3])=[f(W11(1)x1+W21(1)x2+b1),f(W12(1)x1+W22(1)x2+b2),f(W13(1)x1+W23(1)x2+b3)]
- 新的公式中增加了偏置项(bias),偏置项是神经网络中非常常用的一种结构。
- 每个节点的取值不再是单纯的加权和,每个节点的输出在加权和的基础上还做了一个非线性变换。
-
常用的神经网络激活函数的函数图像:
- 这些激活函数的函数图像都不是一条直线,所以通过这些激活函数,每一个节点不再是线性变换,于是整个神经网络模型也就不再是线性的了。
- 偏置项可以被表达为一个输出永远为1的节点。
-
加入偏置项和激活函数的神经网络结构图:
-
目前 TensorFlow 提供了 7 种不同的非线性激活函数,tf.nn.relu 、tf.sigrnoid 和 tf.tanh 是其中比较常用的几个。当然,TensorFlow 也支持使用自己定义的激活函数。
a = tf.nn.relu(tf.matmul(x, w1) + biases1) y = tf.nn.relu(tf.matmul(a, w2) + biases2)