台湾大学深度学习课程 学习笔记 lecture1-2 Neural Network Basics

来源:互联网 发布:dota2网络连接超时 编辑:程序博客网 时间:2024/06/10 05:18

以下内容和图片均来自台湾大学深度学习课程。
课程地址:https://www.csie.ntu.edu.tw/~yvchen/f106-adl/syllabus.html

本节课主要讲了三个问题:
1. What is the model? (function hypothesis set)
2. What does a “good” function mean?
3. How do we pick the “best” function?

为了回答这三个问题,引出了本节课的主要内容框架。
本节内容

接下来针对上面的框架,做出了如下的讲解。本次笔记根据框架内容,从模型、损失函数、优化方法这三个完成。

模型

数字转化

输入数据 x 可能是图片或者语音,首先将其转化为可进行计算的数字信息,这些数字保存在多维矩阵中。
同样的,对输出结果 y ,以分类任务的二元分类与多元分类为例,也可以保存在一个多维矩阵中。
这样,在接下来的模型处理中,使用这些转化后的数字进行计算。

数字转化

单层神经网络

上节讲到的单个神经元结构中,将bias b 当成一个特殊的权重,此时对应的 x 应该为1。
神经元

b 的意义

那么 b 的意义是什么呢?
如果没有 b 的话,由于公式 z=wx+b 是高维线性的关系,如果没有 b ,那么所有的 z 必定都是过原点的,那么很多情况无法将其进行准确划分(如下图)。所以添加了bias,使得 z 可以在更多情况下进行准确划分。
bias

这个地方,台大原视频课程中,老师采用的下面的方式讲解,这里将 b 转换到了 σ(z) 的方程里,多做了一层转换,不是那么容易理解,所以用了上面自己所理解的方法解释。

bias2

分类模型应用

在二分类中,例如判断图形是否为2,我们得到的结果为“is”和“not”的概率。一般认为大于0.5所对应的结果为最终预测的结果。
二分类
再多分类中,例如判断图形是0~9中的哪一个数字。每一个分类都能得到一组“is”和“not”的概率。由于数字之间具有一些相似性(例如5和6,在手写中图片中可能比较接近),导致最终结果中可能5和6的预测为“is”的概率都大于0.5。所以一般认为“is”的概率最大的那个所对应的为最终预测的结果。
多分类

单层的局限性

单层神经网络(无隐藏层),首先提到的就是没有共享权重,也就是说,每个输入的 x 只进行了一个神经元的转换就输出了 y 结果,各个神经元之间没有共享信息,导致模型过于简单。
单层局限性1

模型过于简单的直接结果就是很多情况下,无法进行区分。直观的理解如下图,当出现第三种情况是,无法使用模型进行区分。

单层局限性2

所以在实际应用中,我们往往需要多层神经网络,来增加模型的复杂度。

那么为什么增加层数后模型就能进行复杂的划分了呢?
针对上面第三个无法划分的图,我们使用两层神经网络来进行简单的XOR演示。可以看出,两层过后,第三层(输出层)的结果已经可以将之前无法进行线性切分的点进行区分。

XOR

其实,两层神经元实际上效果已经远远好于一层的结果。接下来如果继续增加层数,每增加一层,模型的复杂度会极大的得到增强。所以,多层神经网络能够有效的处理非常复杂的问题。

所以,对比上面单层的模型,下面两层和三层的 function模拟图形如下。所以直观的来看,多层的模型比一层的要复杂的多。
多层模拟图

多层神经网络

多层神经网络中,两端是输入和输出层,中间是隐藏层。输入层不计算层数,比如第一层,指的是隐藏层的第一层,输入样本 x 是不计算进层数的。

多层神经网络

符号表示方式

激活函数 a 的符号表示方法。

a的符号

系数 w 的符号表示方法,这里需要注意的是,一般我们公式都写成 z=WTx+b ,而此时的系数 W 是需要转置的,所以针对的 wij 的下标表示方式也需要注意一下,i 代表 l 列神经元数量,而 j 代表 (l1) 列。有时候转置符号 T 会省略。

w的符号

b 的符号表示方法,bii 为当前层神经元的数量。

b的符号

z 公式表示方法。

z公式

综和上面所有符号:
综合

下面是公式的矩阵表示形式,相比之前有了极大的简化。

z公式矩阵表示

a公式矩阵表示

y公式矩阵表示

激活函数 Activation Function

下面是最常用的三个激活函数。三个都是非线性的。

激活函数

非线性

为什么要用非线性的激活函数?
每个隐藏层都用线性函数当做激活函数的话,那么模型永远都是线性的,无法去做非线性的操作,那么模型的能力永远也不会有较大的提升。
换种说法,理论上讲是可以用一个更复杂的线性函数,来表示多个线性的函数的。我可以用一个更复杂的线性函数来表示之前的多层线性函数,那么多层变的没有意义。
如果激活函数是非线性的,那么模型效果才可以不断地通过非线性转换来提高,多层神经网络才变得有意义。

非线性原因

损失函数

从上面公式来看,模型的公式已经确定,模型之间的区别就是参数 wb 之间的区别。任何一个 wb 产生变化,最后的模型都不一样。所以我们需要做的就是确定每一个 wb 使得最终的模型预测效果最好。
θ 代表所有 wb 的集合。
参数

既然最终目的是确定最好模型的每个参数,那么首先要确认什么是最好的模型,其次再去找最好模型的参数。那么什么是最好的模型呢?
就是损失函数最小的模型。所以对应的参数就可以写成:

θ=arg min C(θ)

theta

C(θ) 就是损失函数,损失函数一般为平方损失,也就是真实 y 值与模型预测结果 f 之差的平方和。

C(θ)=k||y^kf(xk;θ)||=(f(x;θ)y^)2

损失函数

优化

梯度下降 Gradient Descent(GD)

有了损失函数 C(θ) ,如何确定参数呢?
暴力枚举显然是不切实际的,我们一般采用偏导数为0 的方法找到最小值。

优化方法

根据下图中的公式,当 C(θ)x 值为负,说明处于下降状态, θ:=θC(θ)x 的值会不断增加,向右移动。为正则相反。不断迭代,直到找到偏导为0时,认为此时是损失函数的最小值。
η 为学习率 learning rate,此处为正值。决定着移动的步长。

偏导

求出 θ 的每一个偏导数,然后同步更新。

梯度下降

这种方法就是梯度下降法

将上述方法应用到神经网络中,得到下面的过程。

神经网络梯度下降

具体每一个偏微分的推导公式如下:

公式1

这公式2

公式3

汇总1

汇总2

随机梯度下降 Stochastic Gradient Descent (SGD)

梯度下降(GD),所有的样本全部计算一次后进行迭代,这样使得效率很低,速度很慢。介绍另外一个极端 随机梯度下降(SGD) 。SGD每次只迭代一个样本,这样虽然迭代速度变快,但是会变的很不稳定。迭代大量样本之后,总体趋势向着梯度的反方向进行,但是每一次迭代方向很不稳定。

GDvsSGD

Mini-Batch

接下来介绍的就是Mini-Batch方法,可选择一次使用B个样本的迭代。很明显这种方法介于GD与SGD之间的方法。

MiniBatch伪代码

GD vs SGD vs Mini-Batch

总结公式:

GDvsSGDvsMiniBatch

下面这个图片是三个梯度下降方法的对比,蓝色线是准确率,红色为计算时间。

对比1

课上老师没有讲准确度的问题,重点讲了一下计算时间的原因。如下图,可以发现,Mini-Batch计算时间是相对较短的。如果选择合适的Batch,可以极大地缩短计算时间。

对比2

原因是相同计算能力的计算机,在矩阵计算方面远大于循环计算。GD虽然是矩阵计算,但样本全部迭代耗时较久;SGD虽然迭代快,但却抛弃了矩阵计算,只能用循环计算。而Mini-Batch既能快速迭代,又能部分使用矩阵,增加计算速度。

矩阵计算优势

最后提到了,一个神经网络中比较严重的问题。就是很多情况下,我们往往只能找到局部最小值而无法找到全局最小值。而且目前没有非常好的方法去解决。

局部最小值问题

实用技巧

初始化对结果的影响

不同的初始化结果,最后优化完成的公式可能不同。不同的初始化位置,下降的方向会有不同,从而进入不同的局部最小值中。

不同初始化

学习率的选择

过大则可能找不到最优点,过小则速度非常慢。所以确定一个合适的学习率大小比较重要。

学习率选择

Mini-Batch Tips

  • 每次迭代时,重置Batch的样本,让每次学习到的样本都不一样;
  • 使用同样大小的Batch size,有利于提高计算速度;
  • 与学习率综合考虑进行调整。

Mini-Batch-Tips

Learning Recipe

Learning_Recipe

过拟合

过拟合的解决方法:
1. 获取更多训练数据;
2. Dropout 等。

过拟合

阅读全文
0 0
原创粉丝点击