您的位置:首页 > 其它

[笔记]零基础入门深度学习(2) - 线性单元和梯度下降

2019-03-13 19:42 309 查看

零基础入门深度学习(2) - 线性单元和梯度下降

  • 线性单元(可用矩阵表示)

  • 监督学习
    为了训练一个模型,我们要提供这样一堆训练样本:每个训练样本既包括输入特征x,也包括对应的输出(也叫做标记y,label)。用这样的样本去训练模型,让模型既看到我们提出的每个问题(输入特征x),也看到对应问题的答案(标记y)。当模型看到足够多的样本之后,它就能总结出其中的一些规律。然后,就可以预测那些它没看过的输入所对应的答案了。

  • 无监督学习
    训练样本中只有x而没有y。模型可以总结出特征x的一些规律,但是无法知道其对应的答案。
    很多时候,既有x又有y的训练样本是很少的,大部分样本都只有x。比如在语音到文本(STT)的识别任务中,x是语音,y是这段语音对应的文本。我们很容易获取大量的语音录音,然而把语音一段一段切分好并标注上对应文字则是非常费力气的事情。这种情况下,为了弥补带标注样本的不足,我们**可以用无监督学习方法先做一些聚类,让模型总结出哪些音节是相似的,然后再用少量的带标注的训练样本,告诉模型其中一些音节对应的文字。**这样模型就可以把相似的音节都对应到相应文字上,完成模型的训练。

  • 梯度下降优化算法
    通过迭代法试出极值。
    每次都是向函数的梯度的相反方向来修改。梯度是一个向量,它指向函数值上升最快的方向。显然,梯度的反方向当然就是函数值下降最快的方向了。每次沿着梯度相反方向去修改的值,就能走到函数的最小值附近。我们每次移动的步长不会那么恰到好处,有可能最后一次迭代走远了越过了最小值那个点。步长,也称作学习速率。

  • 推导 见原文

  • 随机梯度下降算法(Stochastic Gradient Descent, SGD)

    如果我们更新的迭代,要遍历训练数据中所有的样本进行计算,我们称这种算法叫做批梯度下降(Batch Gradient Descent)。实用的算法是SGD算法。在SGD算法中,每次更新的迭代,只计算一个样本。这样对于一个具有数百万样本的训练数据,完成一次遍历就会对更新数百万次,效率大大提升。由于样本的噪音和随机性,每次更新并不一定按照减少的方向。然而,虽然存在一定随机性,大量的更新总体上沿着减少的方向前进的,因此最后也能收敛到最小值附近。
    SGD不仅仅效率高,而且随机性有时候反而是好事。今天的目标函数是一个『凸函数』,沿着梯度反方向就能找到全局唯一的最小值。然而对于非凸函数来说,**存在许多局部最小值。**随机性有助于我们逃离某些很糟糕的局部最小值,从而获得一个更好的模型。

  • 实现:继承上一章感知器

-总结: 一个机器学习算法其实只有两部分
1.模型 从输入特征预测输入的那个函数
2.目标函数 目标函数取最小(最大)值时所对应的参数值,就是模型的参数的最优值。很多时候我们只能获得目标函数的局部最小(最大)值,因此也只能得到模型参数的局部最优值。

接下来,你会用优化算法去求取目标函数的最小(最大)值。[随机]梯度{下降|上升}算法就是一个优化算法。针对同一个目标函数,不同的优化算法会推导出不同的训练规则。我们后面还会讲其它的优化算法。

其实在机器学习中,算法往往并不是关键,真正的关键之处在于选取特征。选取特征需要我们人类对问题的深刻理解,经验、以及思考。而神经网络算法的一个优势,就在于它能够自动学习到应该提取什么特征,从而使算法不再那么依赖人类,而这也是神经网络之所以吸引人的一个方面。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: