一、线性变换
1.1 单个(层)神经元:
如上图所示,单个参数经过单个神经元变化后得到输出y为wx+b,其中w为权重,b为偏置,这个过程就叫做线性变换,也就是x和y呈线性相关。
1.2 多个神经元输出
注意:神经元的输入大小必须跟x的大小相同。例如:x包含5个数,那么输入层神经元就有5个
1.2.1 输出神经元个数相同
多个神经元与单个神经元相似,x变为向量[···
],输出y也为向量,输出的向量为[
···
],每个y对应一个x的权重和偏置计算。每个x的权重和偏置都是不相同的。
1.2.2 不同输出
当出现输出结果不同时,例如一个网络为4个输入层,2个输出层。那么该网络的输入层需要处理4个输入数据得到2个输出数据,也就对应了4输入神经元,2个输出层神经元,这时神经网络需要如何计算呢?
此时就需要引入矩阵运算,w权重变为权重矩阵如下所示:
二、非线性变换
2.1 非线性变换意义
如上图所示, 若引入多层神经元,计算方式仍为时,输出仍为线性变换,仍相当于单层神经元的作用。x和y仍为线性关系。因此我们要引入非线性变换来解决此问题。
把神经网络训练看为分类过程,那么只有线性变化就相当于在任意二维平面上,只能划分出线,在任意三维体中,只能划分出面,因此无法用于复杂的分类问题。那么就要引入非线性函数。
我们可以将非线性激活函数理解为将分类线进行扭曲变换,因此可以进行更复杂的分类问题。
图2.1引入非线性函数f的神经元:
2.2 激活函数
上述的非线性函数就是激活函数,常见的激活函数有tanh,sigmoid,ReLu等。
2.2.1 ReLu函数
如下图是ReLu函数的图像和它的一个改进Leaky ReLu,融入Relu函数后,变为如下计算公式
→
→
例如
我们需要训练一个网络如下,输入x输出y满足:
设计一个神经网络拟合x和y:输入层1,隐藏层6,输出层1
2.2.2 无激活函数
假如训练出来中间层的w和b为:[5,7.7],[1.2,1.3],[-1.2,-1],[1.2,-0.2],[2,-1.1],[5,-5]若没有激活函数,那么计算出来的6个线性表达式相加仍为一个线性表达式,为一条直线,无法拟合函数图像。
2.2.3 使用ReLu激活
通过ReLu的图像可知,使用ReLu激活函数时,函数只会输出正数或0,无法输出负数,这是不符合预期的,因此我们还需要加上符号矩阵,使用ReLu激活后表达式变为:
神经网络的拟合图像变为如下,红色为训练出的网络拟合函数,蓝色为目标函数:
如上图可看出通过ReLu激活后,神经网络可以拟合复杂函数。类似的激活函数还有sigmoid函数,tanh函数等一些其他函数的变体。