吴恩达机器学习-神经网络-反向传播算法

神经网络的学习

无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大,这时候我们需要神经网络

神经网络模型

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
在这里插入图片描述
引入z:

在这里插入图片描述
下面是一个例子:
在这里插入图片描述
在这里插入图片描述

特征和直观理解

神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
我们可以用这样的一个神经网络表示 AND 函数
在这里插入图片描述
其中𝛩0 = −30,𝛩 1 = 20𝛩2 = 20 我们的输出函数ℎ 𝜃 (𝑦)即为:ℎ 𝛩 (𝑦) = g(−30 + 20𝑦 1 +20𝑦 2)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
or函数
在这里插入图片描述
XNOR
在这里插入图片描述
然后将表示 AND 的神经元和表示(NOT x 1 )AND(NOT x 2 )的神经元以及表示 OR 的神经元进行组合:
在这里插入图片描述

多类分类

当我们有不止两种分类时(也就是𝑧 = 1,2,3….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。
输入向量𝑦有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现
在这里插入图片描述

神经网络参数的反向传播

代价函数

首先引入一些便于稍后讨论的新标记方法:
在这里插入图片描述
代价函数:
在这里插入图片描述
这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。
在这里插入图片描述

反向传播算法

在这里插入图片描述
在这里插入图片描述

反向传播算法的直观理解

在这里插入图片描述
详情还是多看看视频会理解些吧【捂脸】

展开参数

把你的参数从矩阵展开成向量,以便我们在高级最优化步骤中的使用需要。
在这里插入图片描述
DVec:取出所要的,变成向量,在用reshape又可以变成矩阵

在这里插入图片描述

梯度检验

当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与DVec(在反向传播中得到的导数)与等于,就是正确的
注意:一旦通过检验确定反向传播的实现是正确的,就应该关掉梯度验证,不再去使用它,因为在每一次循环中都用梯度检验代码之后,代码就会变得非常慢,一定要在训练之前,关闭它

综合起来(使用神经网络步骤)

小结一下使用神经网络时的步骤:
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。第一层的单元数即我们训练集的特征数量。最后一层的单元数是我们训练集的结果的类的数量。如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:

  1. 参数的随机初始化
  2. 利用正向传播方法计算所有的ℎ 𝜃 (𝑦)
  3. 编写计算代价函数 𝐾 的代码
  4. 利用反向传播方法计算所有偏导数
  5. 利用数值检验方法检验这些偏导数
  6. 使用优化算法来最小化代价函数

自主驾驶

大概了解一下他的应用吧

使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶。 ALVINN (Autonomous Land Vehicle In a
Neural Network)是一个基于神经网络的智能系统,通过观察人类的驾驶来学习驾驶,ALVINN 能够控制
NavLab,装在一辆改装版军用悍马,这辆悍马装载了传感器、计算机和驱动器用来进行自动驾驶的导航试验。
第一步,是对它进行训练,也就是训练一个人驾驶汽车。 然后让 ALVINN 观看,ALVINN
每两秒将前方的路况图生成一张数字化图片,并且记录驾驶者的驾驶方向,得到的训练集图片被压缩为 30x32 像素,并且作为输入提供给
ALVINN 的三层神经网络,通过使用反向传播学习算法,ALVINN
会训练得到一个与人类驾驶员操纵方向基本相近的结果。一开始,我们的网络选择出的方向是随机的,大约经过两分钟的训练后,我们的神经网络便能够准确地模拟人类驾驶者的驾驶方向,对其他道路类型,也重复进行这个训练过程,当网络被训练完成后,操作者就可按下运行按钮,车辆便开始行驶了。
然后让 ALVINN 观看,ALVINN 每两秒将前方的路况图生成一张数字化图片,并且记录驾驶者的驾驶方向,得到的训练集图片被压缩为
30x32 像素,并且作为输入提供给 ALVINN 的三层神经网络,通过使用反向传播学习算法,ALVINN
会训练得到一个与人类驾驶员操纵方向基本相近的结果。一开始,我们的网络选择出的方向是随机的,大约经过两分钟的训练后,我们的神经网络便能够准确地模拟人类驾驶者的驾驶方向,对其他道路类型,也重复进行这个训练过程,当网络被训练完成后,操作者就可按下运行按钮,车辆便开始行驶了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值