美文网首页
06.神经网络学习-2

06.神经网络学习-2

作者: 92e21e4ff767 | 来源:发表于2019-04-27 14:08 被阅读0次

    神经网络的优化目标

    数学目标

    不论损失函数是什么形式,神经网络的优化目标都是使得损失函数最小化。对于均方误差函数和交叉熵函数,函数的极小值即为函数的最小值。

    优化神经网络,通过求解上述损失函数梯度为0的点即可获得。

    数学上,梯度表示为:

    \nabla f = \left( \frac{\partial f}{\partial x_0}, \frac{\partial f}{\partial x_1}\right)

    数值解

    现实中,由于损失函数的维度很高,直接求解梯度函数不现实。可以通过梯度下降法,用数值解来逼近理论最优解。

    在一个函数中,某一点的梯度,表明在该点上,沿着某一个维度进行下降的最快方向。

    用超参来表示每次逼近最优解的步长,\eta的选取会影响算法性能。\eta过大则可能不会收敛,\eta过小,则迭代次数过多,算法性能下降。

    每一轮的迭代数学上可表示为:

    x_0 = x_0 - \eta\frac{\partial f}{\partial x_0} \\x_1 = x_1 - \eta\frac{\partial f}{\partial x_1}

    神经网络的梯度

    神经网络中需要调整的参数为每一级的权重矩阵\mathbf{W}和偏置向量\mathbf{b},则神经网络的梯度可表示为:

    \begin{equation}\frac{\partial L}{\partial \mathbf{W}} = \begin{pmatrix}   \frac{\partial L}{\partial w_{11}} & \frac{\partial L}{\partial w_{12}} & \frac{\partial L}{\partial w_{13}}\\   \frac{\partial L}{\partial w_{21}} & \frac{\partial L}{\partial w_{22}} & \frac{\partial L}{\partial w_{23}}\end{pmatrix}\end{equation}

    神经网络的Python算法实现

    算法描述

    前提

    神经网络存在适合的权重和偏置,使得数据的学习可以获得足够小的“损失”。

    步骤1:mini-batch选取数据

    根据mini-batch方法,选择出一部分训练序列,通过神经网络的训练使得函数的损失值变小。

    步骤2:计算数值梯度

    求出各个权重参数的梯度。

    步骤3:更新参数

    按照梯度的方向,以\eta的速度更新权重矩阵和偏置向量,降低损失函数。

    步骤4:判断迭代是否停止或重复步骤1

    如果迭代满足了一定的条件,比如到达迭代最大次数,或者损失函数足够小,或者损失函数的变化足够小,可以停止算法;否则重复步骤1~3。

    代码概述

    代码参见附件,几个关键类成员变量和成员函数及作用如下:

    初值选取

    在构造函数中可以设定网络权重矩阵和偏置向量的初始值,\mathbf{W}初始值随机选取,\mathbf{b}可以选取为0向量。可以将网络的这两个参数保存在类的成员变量params中。

    损失函数

    loss(self, x, t)为损失函数,用来计算预测值与真实值之间的误差评价。

    预测函数

    predict(self, x)为预测函数,通过网络的参数计算对输入数据的预测值。

    梯度函数

    numerical_gradient(self, x, t)为用数值方法计算的梯度函数,在后面章节中对这个函数有优化。

    超参选取

    以下超参需要在算法开始前选取,对应作用如下:


    mini-batch的函数实现

    列举一部分代码:

    相关文章

      网友评论

          本文标题:06.神经网络学习-2

          本文链接:https://www.haomeiwen.com/subject/qpqknqtx.html