本文为根据课堂内容整理的笔记,使用的课件讲义为李弘毅的《一天搞懂深度学习》。

引入

什么是深度学习?

现在,有关于一支股票的数据和图片。

1. 给出股票数据,返回走势图,这是统计。

2. 给出股票图片,告诉我们“这是一个K图”——这是机器学习中的模式识别。

3. 给出股票数据和图片,告诉我们这支股票的走势,这是机器学习中的数据挖掘。

4. 给出股票的数据和图片,告诉我们这只股票的好坏,以及投资组合建议,那么这就是深度学习。

深度学习是“机器智慧”的体现,通过对数据的学习,能够对做出合理的预测和建议。

机器学习 Machine Learning

机器学习的本质,就是找到一个函数——即找到一种映射,将输入映射到某一种结果上。

Speech recognition:f(audio sample) = “How are you”

Image recognition:f(image sample) = "Cat"

Dialog:f("Hi") = "Hello"

在函数中,存在一组准备好的模型,将输入和模型进行比较,得出最终的结论。

那么如何对结果进行评价?在监督学习中,我们会将预测结果和真实结果(标签)进行比较来比较结果好坏。

深度学习的基本常识

深度学习的一般过程

1. 定义一组函数

2. 算法调优:给出训练集进行训练

3. 找到最好的一个函数

其中的第一步,由神经网络(Neural Network)完成。

神经网络的组成

  1. 神经元
  2. 偏置值
  3. 激活函数

神经网络的基本单位是神经元,由数据值和权重组成:

神经网络将多个神经元通过激活函数连接起来,不断迭代偏置函数,逐层连接,最终得到类似网络的架构。

不同的连接方式将导致不同的网络结构。

神经网络的分层

神经网络由多层组成:输入层+1~n层隐藏层+输出层。同一层的神经元常用一列表示。

1. 输入层:给出训练集数据。

2. 隐藏层:又称计算层,由权重连接。

隐藏层包含卷积层(Convolutional Layer)、池化层(Polling Layer)、全连接层(Fully Connected Layer)三类常见构筑。其中:

  • 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。
  • 在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制。
  • 卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层通常搭建在卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。特征图在全连接层中会失去3维结构,被展开为向量并通过激励函数传递至下一层。

>> 参考

3. 输出层:给出训练结果,结果往往还会经过softmax layer层进行归一化处理,使各神经元的结果之和为1

随着隐藏层层数的增加,错误率会随之降低。

隐藏层和输出层之间存在函数关系,这个函数被称为“激励函数”。常见的激励函数有:线性激励函数,阈值激励函数/越阶激励函数,S型激励函数,双曲正切激励函数和高斯激励函数。

神经元的数据单元

常用的数据类型:向量/矩阵

前文谈到,机器学习的本质就是找到一个好的函数,那么这个函数的常用参数就是向量和矩阵。

训练终止条件

分析每一次训练结果,若神经元的权重趋于稳定,训练就停止。

也就是说,训练本质上就是寻找一组使结果错误率最低的权重。

神经网络的分类

在真实工业应用中,扩展的神经网络通常会取代传统的神经网络。

一、 CNN(Convolution Neural Network),卷积神经网络,常用于图像处理。

当处理图像时,会根据图像的分辨率建立对应维数的向量,这就会使神经网络的第一层全连接网络(fully connected network)超乎寻常的大,那么如何简化呢?

事实上,我们在处理图像时,往往基于某一个主题。也就是说,我们无需关注整张图,可以在预处理中尽量弱化不关注的部分,仅保真我们关注的部分即可。

好比说,我们要识别图像中鸟的种类,于是我们关注“鸟”的体型、羽毛花色、喙的形状等等,而背景中是否有美女就和我们毫无关系。

另外,我们还可以通过降低像素(Subsampling)来降低维数。降低像素虽然会让图片变得难看,但并不会改变图像中的实体(object)。

CNN的全部流程如下图所示:

2. RNN(Recurrent Neural Network),循环神经网络

在RNN中,隐层神经元的输出值都被保存到记忆单元中,下一次再计算输出时,隐层神经元会将记忆单元中的值认为是输入的一部分来考虑。

RNN中考虑了输入序列顺序,序列顺序的改变会影响输出的结果。

>>参考

Example Application

举一个Slot Filling的例子:

假设我们希望从用户的一句话中提取出用户的目的地和出发时间,可以预先设置两个“槽(slot)”:Destination和time of arrival,希望关键词Taipei和Novemver 2nd能够分别落入这两个槽中。

用前馈神经网络(Feedforward Neural Network)来解决这个问题的话,我们首先要对输入序列向量化,将每一个输入的单词用向量表示,可以使用 One-of-N Encoding 或者是 Word hashing 等编码方法,输出预测槽位的概率分布。

>>参考

但是这样做的话,有个问题就出现了。如果现在又有一个输入是 “Leave Taipei on November 2nd”,这里Taipei是作为一个出发地(Place of Departure),所以我们应当是把Taipei放入Departure槽位而不是Destination 槽位,可是对于前馈网络来说,对于同一个输入,输出的概率分布应该也是一样的,不可能出现既是Destination的概率最高又是Departure的概率最高。

>>参考

3. LSTM,长短神经网络

深度学习框架

Tensor Flow、torch、theanol、ibdnn、Caffe……

推荐的组合是:Keras = TensorFlow+theano

>> 手写体识别数据集

神经网络的应用

1. 监督学习(Supervised learning):阅读理解,可视化问答系统

2. 强化学习(Reinforcement learning):语音问答系统

3. 无监督学习(Unsupervied learning):图像风格化,图像上色,基于主题的图像绘制

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐