神经网络的优化目标
数学目标
不论损失函数是什么形式,神经网络的优化目标都是使得损失函数最小化。对于均方误差函数和交叉熵函数,函数的极小值即为函数的最小值。
优化神经网络,通过求解上述损失函数梯度为0的点即可获得。
数学上,梯度表示为:
数值解
现实中,由于损失函数的维度很高,直接求解梯度函数不现实。可以通过梯度下降法,用数值解来逼近理论最优解。
在一个函数中,某一点的梯度,表明在该点上,沿着某一个维度进行下降的最快方向。
用超参来表示每次逼近最优解的步长,的选取会影响算法性能。过大则可能不会收敛,过小,则迭代次数过多,算法性能下降。
每一轮的迭代数学上可表示为:
神经网络的梯度
神经网络中需要调整的参数为每一级的权重矩阵和偏置向量,则神经网络的梯度可表示为:
神经网络的Python算法实现
算法描述
前提
神经网络存在适合的权重和偏置,使得数据的学习可以获得足够小的“损失”。
步骤1:mini-batch选取数据
根据mini-batch方法,选择出一部分训练序列,通过神经网络的训练使得函数的损失值变小。
步骤2:计算数值梯度
求出各个权重参数的梯度。
步骤3:更新参数
按照梯度的方向,以的速度更新权重矩阵和偏置向量,降低损失函数。
步骤4:判断迭代是否停止或重复步骤1
如果迭代满足了一定的条件,比如到达迭代最大次数,或者损失函数足够小,或者损失函数的变化足够小,可以停止算法;否则重复步骤1~3。
代码概述
代码参见附件,几个关键类成员变量和成员函数及作用如下:
初值选取
在构造函数中可以设定网络权重矩阵和偏置向量的初始值,初始值随机选取,可以选取为0向量。可以将网络的这两个参数保存在类的成员变量params中。
损失函数
loss(self, x, t)为损失函数,用来计算预测值与真实值之间的误差评价。
预测函数
predict(self, x)为预测函数,通过网络的参数计算对输入数据的预测值。
梯度函数
numerical_gradient(self, x, t)为用数值方法计算的梯度函数,在后面章节中对这个函数有优化。
超参选取
以下超参需要在算法开始前选取,对应作用如下:
mini-batch的函数实现
列举一部分代码:
网友评论