Neural Networks for Machine Learning 课程笔记

Cousera 上 神经网络大牛 Geoffrey Hinton 的课程,课程笔记整理与此。

Lec1

什么是机器学习?

(我的理解)定义一个函数,可能拥有巨量的变量及对应的参数,然后根据每个具体任务,提供输入到输出的数据样本,调整参数,使函数在给定输入下,输出逼近正确结果。

本质上就是定义了一种哈希方法,记住了大量的样本!而且是一种相似性哈希,目标是相似的输入输出也要尽可能的相似,至于什么是相似的,是由机器学来的,所谓泛化性(对未知样本的预测能力),就是依赖于这种哈希目标的准确率。所以可以理解见过的越多,准确率越高!但,现实世界中可能的输入到输出空间几乎是无限的!而且即使在当下的所谓大数据时代,很多领域中,这种已处理好的输入到输出的数据依然十分有限!但不管怎样,在最理想状况下(学习方法可以训练到逼近任何可能的函数,并且有所有可能情况的数据),这种方法还是非常有前景!

机器学习方法与传统的全部由规则写死的程序的比较

机器学习方法在面对新的数据样本的变化,只需在结合新的数据重新训练即可,而传统方法可能又要定义很多新的规则。虽然这种做法需要大量计算资源,但现在使用计算资源,比雇人写一个特定任务的程序的花费要小很多。

Lec3

神经网络训练方式:

通过最终输出值更接近目标值,而不是权重矩阵集合更接近理想的矩阵集合。
有了目标相对于loss的导数后,怎么调整它还有两个问题:

  1. 更新的频率(online,full batch, mini-batch)
  2. 更新的幅度,即 learning rate (固定,可变等)

防过拟合的方法:

  1. Weight-decay (加正则项)
  2. Weight-sharing
  3. Early stopping (用一个test set, 一旦发现在这个上面loss反弹,停止训练)
  4. Model averaging
  5. Bayesian fitting of neural nets
  6. Dropout
  7. Generative pre-training

Lec4

词的编码方式:

用one hot, 而不是二进制方式编码,虽然后者编码长度更短,原因有两点:

  1. 二进制相当于加入了先验经验,数值相近的是否就代表它们有相近关系呢?
  2. one hot 线性可分,而二进制不一定。

对概念的理解的两种理论之争:

  1. 特征理论,概念就是语义特征的集合。直接用一个向量表示,很简便。并且概念的相似性在这个理论中很好解释。
  2. 结构理论,一个概念的含义依赖于它和其他概念的关系。所以概念知识可以用关系图很好的表示。

Hinton认为这两种都是不对的,它们不是对立的关系。

  1. 神经网络可以使用语义特征来实现关系图。
  2. 我们会使用明确的规则,慎密的思考,但我们也做许多常识性和类比性的推理。

softmax的好处是:

  1. 把得分转化为概率,并且概率和为1.
  2. 这样得到的概率都大于0,如果直接用得分除总分可能为负
  3. 求导结果很漂亮

神经语言模型

在神经语言模型中,如果最后一层的单词数非常大,那么会导致连接数过多,参数就会非常多,如果数据量不够,很容易过拟合。即使把最后一个隐层改的很小,但由于单词数巨大,导致每个词的概率都很小,很难区分。改进方法,预测并不考虑全部单词。(可参考word2vec的两种方法)

Lec5

为什么物体识别很难?

  1. Segmentation
    很难确定哪些小块一起构成一个物体。
    一个物体的某些部分可能会被遮挡住。
  2. Lighting
    由于光照的不同,导致图像像素点的强度不同。
  3. Deformation
    物体可能会发生形变。
  4. Affordances
    物体可能有多功能性,于是被认为是不同的物体。(eg石头也可以做椅子)
  5. Viewpoint
    视角不同导致图片差异很大。

解决Viewpoint问题的方法有:

  1. 使用冗余的不变量特征
    所谓不变特征即不随变换(位移拉伸等)而改变。
    不需要直接表示特征间的关系,因为它们由其他特征捕获表示了。
  2. 多个重复的特征检测器。
    可以解决位置变换的问题,因为在每个位置都用同样的特征检测器。

在神经网络中加入先验知识

  1. 根据先验知识,设计网络结构,比如:
    Connectivity – local connectivity
    Weight constraints – weight sharing
    Neuron activation functions – pooling
    深层网络,可以取得更好的优化效果。即使我们不能完全理解是怎么做到的。
    (个人理解)这违背了神经网络不用人为设计特征的初衷吗?但现在在DL中确实随处可见各种trick。当数据不够多,训练速度不够快,这些trick的确可以帮助提升性能。
  2. 由先验知识创造更多训练数据。
    比如对图片进行旋转,位移等各种变换,生成新的图片数据。

Lec9

防止overfiting:

  1. 最好的方法,获取更多的数据!如果有足够的计算资源。
  2. 把模型调整为合适的容量。(既不underfiting,又不overfiting)
  3. ensemble method.
  4. 贝叶斯方法。

一些模型容量控制的方法

  1. 从模型架构上,设置层数和每层节点数。
  2. 提前停止训练。
  3. 权重衰减。
  4. 噪音。

权重衰减(weight decay)

方法有加惩罚(penalties) 和 限制 (constraints)。
用不同的惩罚项可以有不同的效果:
L2 cost:权重的平方。防止大的权重出现,使模型更平滑,输出受输入变化的影响更慢。原因,“ If the network has two very similar inputs it prefers to put half the weight on each rather than all the weight on one。”(举个例子,假设一副图片两个相邻像素是一样的,那么用了L2后,filter对这两个像素点的权重一样0.5,若没有用,可能会设其中一个点权重1,另一个是0,。现在新来一副基本一样的图像,但权重为1的那个点出现了一个噪音点,这样输出值就会有比较大的偏差,而都是0.5的,就不会受那么大的影响。)
L1 cost :权重的绝对值。使更多权重为0,可以提高可解释性。

噪音

Adding Gaussian noise to the weights of a multilayer non-linear neural net is not exactly equivalent to using an L2 weight penalty.
在RNN中效果很好!

Lec10

dropout:

每次训练一个新样本时,以一定比例(比如0.5)去掩住一些隐藏节点,以生成不同的网络结构。这样,假设共有H个隐藏节点,那么就可能有2^H种不同的模型,但这些模型是共享权重的。
因此,它本质上是一种bagging方法。并且权重共享意味着每个模型都很强的regularized。
输入层也可以用dropout,但最好有很高的概率保留input unit。
防过拟合效果很好!

你可能感兴趣的:(机器学习,神经网络,geoffrey,hinton)