1、变量符号含义
1、训练集D={(x⃗1,y⃗1),(x⃗2,y⃗2),...,(x⃗m,y⃗m)}D = \{(\vec{x}_1, \vec{y}_1), (\vec{x}_2, \vec{y}_2),..., (\vec{x}_m, \vec{y}_m)\}D={(x1,y1),(x2,y2),...,(xm,ym)},共m个样例
2、x⃗i∈Rd,y⃗i∈Rd\vec{x}_i \in \mathbb{R}^d, \vec{y}_i \in \mathbb{R}^dxi∈Rd,yi∈Rd:输入样本由ddd个属性描述,输出lll维(lll个属性描述)实值向量y⃗i\vec{y}_iyi
3、对应图中的神经网络
d个输入神经元:输入特征向量由d个属性描述l个输出神经元:输出特征向量由y个属性描述q个隐层神经元:拟合数据集线性不可分时的模型
4、连接权都如图所示
5、激活函数:sigmoid
6、阈值:每个神经元都有自己的阈值
输出层第jjj个神经元yiy_iyi的阈值:θi\theta_iθi隐层第hhh个神经元bhb_hbh的阈值:γh\gamma_hγh
7、第x个神经元的输入:FNN都是全连接,因此要求和
输出层第j个神经元的输入:βj\beta_jβj隐层第h个神经元的输入:αh\alpha_hαh
2、损失函数:均方误差推导
1、训练样例(x⃗k,y⃗k)(\vec{x}_k, \vec{y}_k)(xk,yk)
2、其经过神经网络的lll个输出记为y⃗^k=(y1^k,y2^k,...,yl^k)\hat{\vec{y}}_k = (\hat{y_1}^k,\hat{y_2}^k, ...,\hat{y_l}^k )y^k=(y1^k,y2^k,...,yl^k),其中每个输出:
3、则对于这一个训练样例(x⃗k,y⃗k)(\vec{x}_k, \vec{y}_k)(xk,yk),网络的均方误差为:
3、算法:求参数w和θ,BP算法,基于随机梯度下降
3.1 随机梯度下降的理解
参考
梯度是有方向的:曲面上方向导数的最大值的方向就代表了梯度的方向
因此每次规定的步长η\etaη固定,我们的参数就要朝着该参数对应函数梯度的方向(变化最快,如山最陡峭的方向)变化,才能让损失函数值最快地往极小值收敛。
理解:假设你初始在山顶,步长5m,朝着梯度最大(最陡峭的)方向,走5m(也就是当前点的梯度值*步长),能垂直距离下降4m,非最陡峭方向一次则垂直距离下降更少。
批量梯度下降:
对于权值θ⃗\vec{\theta}θ中的每个分量θj\theta_jθj(个数对应样本属性个数),每次所有m个样本的第j个属性值都要参与更新Δ值\Delta值Δ值。更新完所有分量,算作一次批量梯度下降结束。一般我们会重复梯度下降多次
如图代码就是使用批量梯度下降,重复了iters次数,每一次所有样本参与对权值θ⃗\vec{\theta}θ中的每个分量θj\theta_jθj进行更新。那个np.sum
随机梯度下降:
用样本中的一个随机选取的样本x⃗i\vec{x}_ixi来近似我所有的样本,来调整θ
对于权值θ⃗\vec{\theta}θ中的每个分量θj\theta_jθj(个数对应样本属性个数),每次只有样本x⃗i\vec{x}_ixi的第j个属性值参与更新Δ值\Delta值Δ值。更新完所有属性分量,算作一次随机梯度下降结束。一般我们会重复梯度下降多次
3.2 公式推导
求偏导什么时候结果要求和:看连线
单独一条隐含层到输出层的连接权w只影响一个y,因此对其求偏导,无需求和。
但是输入层到隐含层的连接权v,即使是一条,也会影响所有的y。
看图中的连线即可知道。则其实从隐含层的神经元b开始,之后所有的参数,一个都会影响所有的y。故链式法则求偏导时要加上求和符号。