斯坦福机器学习笔记-第五周

神经网络的损失函数

首先,定义几个新的变量:

  • L=神经网络的总层数
  • $s_l$=第l层的单元数(不含偏置项)
  • K=输出单元数

相较于逻辑回归,神经网络的区别在于输出层有多个值,这样,将逻辑回归的损失函数稍加修改,可得神经网络的损失函数:

反向传播算法(backpropagation)

反向传播算法是一个神经网络中用来最小化损失函数的术语,类似逻辑回归和线性回归中的梯度下降。

反向传播的计算流程是:

  1. 给定训练集${(x^{(1),y^{(1)}},…,(x^{(m)},y^{(m)})}$

  2. 设定$\Delta^{(l)}_{i,j}:=0$

  3. 对于训练样本$t=1:m$

    • 设定$a^{(1)}:=x^{(t)}$
    • 计算前向传播的结果$a^{(l)};(l=1,2,…,L)$
  4. 计算$\delta^{(L)}=a^{(L)}-y^{(t)}$

  5. 使用$\delta^{(l)}=[(\Theta^{(l)})^T\delta^{(l+1)}].a^{(l)}.(1-a^{(l)})$ 来计算$\delta^{(L-1)},\delta^{(L-2)},…,\delta^{(2)}$

    这里$g’(z^{(l)})=a^{(l)}.*(1-a^{(l)})$

  6. $\Delta^{(l)}{i,j}:=\Delta^{(l)}{i,j}+a^{(l)}j\delta^{(l+1)}{i}$

    由此得到更新公式:

    $D^{(l)}{i,j}:=\frac{1}{m}(\Delta^{(l)}{i,j}+\lambda\Theta^{(l)}_{i,j});if\ j\neq 0$

    $D^{(l)}{i,j}:=\frac{1}{m}(\Delta^{(l)}{i,j});if\ j= 0$

    这里$D^{(l)}{i,j}=\frac{\partial}{\partial \Theta^{(l)}{i,j}}J(\Theta)$

梯度检验

首先使用反向传播计算梯度$D^{(1)},…,D^{(n)}$,然后使用梯度估算公式计算$\frac{\partial J(\Theta)}{\partial \Theta_j}\approx \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon}$,通过对比两者的差即可知道梯度计算是否正确。

随机初始化

在逻辑回归中,我们使用0来初始化$\theta$,但是在神经网络中,不能使用全0来初始化,这会导致层内的所有神经元结果都是一样的,这样就失去了使用多个神经元的意义。称这样的现象称为对称。为了打破对称,可以使用随机初始化方法。

网络架构的选择

选择网络架构,就是选择网络层数及每层的单元数。对于输入输出层,其单元数是确定的,输入层单元数就是样本的特征数,而输出层的单元数就是分类数目,然而隐藏层的层数及单元数确实不确定的,一般来说,隐藏层一般选择一层,而节点数尽可能多。还有一点就是当选择多层隐藏层时,通常让各层的单元数相同


   转载规则


《斯坦福机器学习笔记-第五周》 查永春 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录