吴恩达-机器学习笔记(第五周)

九、神经网络的学习(Neural Networks: Learning)

9.1 代价函数

  假设神经网络的训练样本有m个,每个包含一组输入x和一组输出信号y,L表示神经网络层数,S_I表示每层的neuron(神经元)个数,S_L代表最后一层中处理单元的个数。
  将神经网络的分类定义为两种情况:二类分类和多类分类,
二类分类:S_L=0,y=0 or 1表示哪一类;
K类分类:S_L=k,y_i=1表示分到第i类;(k>2)


逻辑回归的代价函数为:

  在神经网络中,一个K分类问题,我们可以有很多输出K个变量,即
h_θ (x)
是一个维度为K的向量,并且训练集中的因变量也是K维度的向量,因此我们的代价函数会更加复杂一些,为:

即:
h_θ (x)
与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularizationbias项处理所有参数的平方和。

9.2 反向传播算法

  在训练模型的时候,我们先用正向传播算出误差,再通过反向传播利用误差去更新参数,一正一反,一来一往,循环往复,直至训练完成。
  在正向传播中,我们从第一层开始正向一层一层进行计算,直到最后一层的h_θ (x)
  现在,为了计算代价函数的偏导数{∂\over ∂Θ_ij^{(l)}}J(Θ),我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
四大公式:

9.3 反向传播算法的直观理解

这篇文章已经介绍的很详细了:
https://blog.csdn.net/li744831579/article/details/81915615

9.4 实现注意:展开参数

  本节介绍一个细节——怎样把参数从矩阵展开成向量,以便我们在高级最优化步骤中的使用需要。



9.5 梯度检验

  为了避免对复杂模型使用梯度下降算法时出错,而得不到最优解,引入梯度的数值检验(Numerical Gradient Checking)——通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。
  估计梯度:在代价函数上,对于某个特定的 θ,我们计算出在 θ-ε 处和 θ+ε 的代价值(ε是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计在 θ 处的代价值。



Octave 中代码:

gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)

  当θ为向量——检验偏导数。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对θ_1进行检验的示例:
{∂\over∂θ_1}={J(θ_1+ε_1,θ_2,θ_3...θ_n )-J(θ_1-ε_1,θ_2,θ_3...θ_n )\over2ε}
  最后,对通过反向传播方法计算出的偏导数进行检验。
  将计算出的偏导数存储在矩阵 D^{(l)}_{ij}中,将对每个 θ 计算的近似梯度值存在近似梯度矩阵中,比较两个矩阵。注,检验时,我们要将矩阵展开成为向量。

9.6 随机初始化

  对于神经网络,我们通常用正负ε之间的随机值来初始参数,假设我们要随机初始一个尺寸为10×11的参数矩阵,代码如下:

Theta1 = rand(10, 11) * (2*eps) – eps
9.7 综合起来
神经网络结构:

第一层——特征数量
最后一层——类的数量(K分类就是K个)
隐藏层——每个隐藏层的单元个数相同,且单元的个数越多越好。
需要设计的结构——隐藏层的层数and单元个数

训练神经网络步骤:

(a)参数的随机初始化
(b)利用正向传播方法计算所有的h_θ (x)
(c)编写计算代价函数 J 的代码
(d)利用反向传播方法计算所有偏导数
(e)利用数值检验方法检验这些偏导数
(f)使用优化算法来最小化代价函数

9.8 自主驾驶

ALVINN (Autonomous Land Vehicle In a Neural Network)(基于神经网络,通过观察人类的驾驶来学习驾驶的智能系统)
详情略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。