1. 深度学习简介
本节是17年李宏毅机器学习课程中的一个章节。17年版我刷过一遍,但是看得不详细。大致来说,当时的逻辑是先介绍逻辑回归和softmax,然后引入深度学习。21版就直接从sigmoid曲线拟合函数的逻辑引入深度学习了,比那个版本要简单易懂得多。
本节就是引入部分。因此建议读者有逻辑回归和softmax基础。
逻辑回归用的是sigmoid函数,是softmax的一种二分类情况。具体的我也没搞清楚,就不写了。
- 深度学习的历史经历了一系列起起伏伏(蓝字为兴盛期,红字为衰落期)
1958年 提出线性感知器
1969年 提出线性感知器的局限性
1980年 提出多层感知器(已经类似于当代深度神经网络)
1986年提出反向传播算法
1989年 提出一层隐藏层就够了,不需要搞“深度”
2006年 发明RBM玻尔兹曼机(初始化梯度下降的方法,是一个非常复杂的graphical base模型。在对模型性能的提升上没什么用,但引起了大家对DL的兴趣)
2009年 应用GPU训练神经网络
2011年 在语音识别领域流行应用DL
2012年 DL方法赢得ILSVRC图像识别比赛
- 深度学习和机器学习一样分成三步走:定义函数集→定义函数优劣→选择最好的函数(和21版的 建立模型→定义损失函数→优化参数 是一回事,但是新版的更明确了优化参数的过程,更清晰了)
1.1 Step1:建立模型
- 将多个逻辑回归(一个逻辑回归就是一个神经元)连在一起,就组成了这样的神经网络:不同的连接方式就是不同的网络结构
神经网络中的参数 θ \thetaθ:所有神经元(逻辑回归)中的权重和偏置
- 全连接网络,就是如图所示每一层所有神经元都与前后层所有神经元相连:
- 对于不知道参数的模型,就是一个可以优化参数、通过损失函数定义来找到最优函数(最优参数)的函数集。
全连接前馈网络结构如图所示,就是这样一个模型:
网络由输入层、隐藏层、输出层构成。
(其实输入层不算一层,因为没有神经元;但是我们也把它称呼为一层)
- 深度神经网络深就深在有很多层。
- 可以用矩阵运算来表示全连接网络的计算过程。单层:
- 整个神经网络,所有层:
- 整个神经网络的函数 f ( x ) f(x)f(x) 就可以表示为:
可以通过平行计算技术来加速矩阵运算(GPU就是在矩阵运算时用的)
- 神经网络的输出层,如果是多标签分类任务,可以使用softmax输出一个概率分布。
隐藏层实现了特征抽取工作,相当于代替了传统机器学习中的特征工程任务。
11.举例:手写数字识别任务
- 输入一张图片(表示为像素向量的格式),输出这张图片代表哪个数字(一个独热编码向量,该数字对应索引位置的元素置1、其他元素置0)
- 选择一个神经网络模型,输入图像数据
(注意,需要定义一个存在好函数的函数集)
- 深度学习的好处在于不需要做过多的特征转换,比如影像识别任务可以直接将像素图作为输入进行训练;但与此同时,深度学习需要自己设计网络结构,设计出一个含有好函数的函数集(模型)。
因此,可以说,从机器学习到深度学习,就是将难点从如何抽取特征变成如何设计网络结构。
- Q:这个网络需要多少层?——A:凭多次实验和经验直觉。
Q:这个网络结构可以自动生成吗?——A:可以,比如用演化算法(evolutionary artificial neural networks (EANNs))。但是这种做法不常用。1
Q:除了全连接网络,我们还能定义别的网络结构吗?——A:可以,比如卷积神经网络CNN(后期课程会讲)。
1.2 Step2:定义函数优劣(损失函数)
1.3 Step3:选择最好的函数(优化参数)
- 反向传播:一种在神经网络中计算梯度的有效方法(各深度学习框架都内置计算方法,编程时不用手动算)
- 在实践中,神经网络越深(在不增加单层神经元数量的情况下)确实表现越好:
图中网址:http://neuralnetworksanddeeplearning.com/chap4.html
- 其他建议学习资料:
- 15版课程
- 15版课程-6小时版 (这是个2016年的PPT,slideshare网站可能不方便上,如有需要可以联系我下下来放到GitHub之类的平台上以供下载)
- Neural Networks and Deep Learning
- Deep Learning
2. 反向传播
- 从另一侧的观点来看,backward pass可以视为这样的一个奇怪的neuron:
注意 σ ′ ( z ) 是个常数,因为 z 在前向传播的过程中已经确定了。
所以这个neuron不是用的激活函数,而可视为一个放大器(就乘以 σ ′ ( z ) 这个常数)
- 在实际计算过程中,就是从最后一层开始往前算偏导: