讲解视频:学习视频
BP神经网络
1.激活函数
激活函数(Activation Function)是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数对于人工神经网络模型去学习、理解复杂的非线性函数,具有十分重要的作用。
如果不使用激活函数,每一层输出都是上一层输入的线性运算,无论神经网络有多少层,最终的输出只是输入的线性组合,相当于感知机。如果使用了激活函数,将非线性因素引入到网络中,使得神经网络可以任意逼近任何非线性函数,能够应用到更多的非线性模型。
常用的激活函数
sigmoid 函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间,公式如下:
ReLU函数
Relu激活函数(The Rectified Linear Unit),用于隐藏层的神经元输出。公式如下:
f(x)=max(0,x)
Tanh 函数
Tanh 是双曲函数中的一个,Tanh() 为双曲正切。在数学中,双曲正切“Tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。公式如下:
softmax 函数
softmax 函数用于输出层。假设输出层共有n个神经元,计算第k个神经元的输出ky
softmax 函数的分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。softmax 函数公式如下:
2.神经网络结构
第0层是输入层(2个神经元),第1层是隐含层(3个神经元),第2层是隐含层(2个神经元),第3层是输出层。
符号约定
3.损失函数
在有监督的机器学习算法中,我们希望在学习过程中最小化每个训练样例的误差。通过梯度下降等优化策略完成的,而这个误差来自损失函数。
损失函数用于单个训练样本,而成本函数是多个训练样本的平均损失。优化策略旨在最小化成本函数。下面例举几个常用的损失函数。
回归问题
分类问题
4.反向传播
反向传播的基本思想:通过计算输出层与期望值之间的误差来调整网络参数,使得误差变小(最小化损失函数或成本函数)。反向传播基于四个基础等式,非常简洁优美,但想要理解透彻还是挺烧脑的。
求解梯度矩阵
矩阵相乘
矩阵对应元素相乘
使用符号⊙ \odot⊙表示:
梯度下降法
从几何意义,梯度矩阵代表了函数增加最快的方向,沿着梯度相反的方向可以更快找到最小值。
反向传播的过程就是利用梯度下降法原理,逐步找到成本函数的最小值,得到最终的模型参数。
反向传播公式推导(四个基础等式)
等式一 输出层误差
写成矩阵形式是:
表示成公式:
推导
等式二 隐藏层误差
写成矩阵形式:
矩阵形状:(j,k) * (k,1) ⊙ (j,1) = (j,1)
权重矩阵的形状从(k,j)转置变成(j,k)。
表示成公式:
推导
等式三 参数变化率
写成矩阵形式:
矩阵形状:(j,1)
矩阵形状:(j,1) * (1,k) = (j,k)
表示成公式:
推导
等式四 参数更新
根据梯度下降法原理,朝着梯度的反方向更新参数
写成矩阵形式:
这里的α 指的是学习率。学习率决定了反向传播过程中梯度下降的步长。
反向传播图解
计算输出层误差
计算隐藏层误差
计算参数变化率
反向传播公式总结
单样本输入公式表
多样本输入公式表
成本函数
多样本输入使用的成本函数与单样本不同。假设单样本的成本函数是交叉熵损失函数。
L(a,y)=−[y⋅log(a)+(1−y)⋅log(1−a)]
那么,对于m个样本输入,成本函数是每个样本的成本总和的平均值。
误差
单样本输入的每一层的误差是一个列向量
而多样本输入的每一层的误差不再是一个列向量,变成一个m列的矩阵,每一列对应一个样本的向量。那么多样本的误差定义为:
参数变换率