深度学习
第一章 深度学习概述
一、引入
1. 人工智能划时代事件
- 2016年3月,Google公司研发的AlphaGo以4:1击败世界围棋顶级选手李世石。次年,AlphaGo2.0对战世界最年轻的围棋四冠王柯洁,以3:0击败对方,背后支撑AlphaGo具备如此强大能力的,就是“深度学习”(Deep Learning)。
- 一时间,“深度学习”这个本专属于计算机学科的术语,成为包括学术界、工业界、风险投资界等众多领域的热词。
2. 深度学习巨大影响
- 除了博弈,深度学习在计算机视觉(computer vision)、语音识别、自动驾驶等领域,表现与人类一样好,甚至有些地方超过了人类。2013年,深度学习就被麻省理工学院的《MIT科技评论》评为世界10大突破性技术之一。
- 深度学习不仅是一种算法升级,还是一种全新的思维方式,它的颠覆性在于,将人类过去痴迷的算法问题,演变成数据和计算问题,以前“算法为核心竞争力”正在转换为“数据为核心竞争力”。
二、深度学习的定义
1. 什么是深度学习?
- 简单来说,深度学习就是一种包括多个隐含层(越多即为越深)的多层感知机。它通过组合低层特征,形成更为抽象的高层表示,用以描述被识别对象的高级属性类别或特征。能自生成数据的中间表示(虽然这个表示并不能被人类理解),是深度学习区别于其他机器学习算法的独门绝技。
- 所以,深度学习可以总结成:通过加深网络,提取数据深层次特征。
2. 深度神经网络
3. 深度学习与机器学习的关系
- 人工智能学科体系
- 人工智能、机器学习、深度学习三者的关系,可以认为深度学习是机器学习的“高级阶段“
三、深度学习的特点
1. 深度学习的特点
- 优点:
- 性能更优异
- 不需要特征工程
- 在大数据样本下有更好的性能
- 能解决某些传统机器学习无法解决的问题
- 缺点:
2. 深度学习的优点
2.1 性能更优异
2.2 不需要特征工程
- 传统机器学习需要人进行特征提取(特征工程),机器性能高度依赖于特征工程的质量。在特征很复杂的情况下,人就显得无能为力。而深度学习不需要这样的特征工程,只需将数据直接传递给深度学习网络,由机器完成特征提取。
2.3 深度学习在大样本数据下有更好的性能和扩展性
2.4 深度学习能解决传统机器学习无法解决的问题(如深层次特征提取)
3. 深度学习的缺点
- 深度学习在小数据上性能不如传统机器学习
- 深度学习网络结构复杂、构建成本高
- 传统机器学习比深度学习具有更好的解释性
4. 深度学习与传统机器学习对比
5. 为什么要学习深度学习?
- 深度学习具有更强的解决问题能力(例如图像识别准确率明显超过机器学习,甚至超过了人类)
- 掌握深度学习具有更强的职业竞争力
- 深度学习在行业中应用更广泛
四、深度学习的应用
- 图像分类、人脸识别、图像迁移、语音处理、自动驾驶、机器博弈、机器人、自然语言处理
五、深度学习总结
第二章 感知机与神经网络
一、感知机概述
1. 什么是感知机?
- 感知机(Perceptron),又称神经元(Neuron)。是神经网络(深度学习)的起源算法,1958年由康奈尔大学心理学教授弗兰克·罗森布拉特(Frank Rosenblatt)提出,它可以接收多个输入信号,产生一个输出信号。
2. 感知机的功能
- 实现逻辑运算,包括逻辑和(AND)、逻辑或(OR)
- 实现自我学习
- 组成神经网络
3. 实现逻辑和
4. 实现逻辑或
5. 感知机的缺陷
- 感知机的局限在于无法处理“异或”问题
6. 多层感知机
- 1975年,感知机的“异或”难题才被理论界彻底解决,即通过多个感知机组合来解决该问题,这种模型也叫多层感知机(Multi-Layer Perceptron,MLP)。如下图所示,神经元节点阈值均设置为0.5
7. 代码
def AND(x1, x2):
w1, w2 = 0.5, 0.5
theta = 0.7
tmp = x1 * w1 + x2 * w2
if tmp <= theta:
return 0
else:
return 1
print(AND(1, 1))
print(AND(1, 0))
print(AND(0, 0))
def OR(x1, x2):
w1, w2 = 0.5, 0.5
theta = 0.2
tmp = x1 * w1 + x2 * w2
if tmp <= theta:
return 0
else:
return 1
print(OR(1, 1))
print(OR(1, 0))
print(OR(0, 0))
def XOR(x1, x2):
s1 = not AND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
print(XOR(1, 1))
print(XOR(1, 0))
print(XOR(0, 0))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
二、神经网络
1. 什么是神经网络?
- 感知机由于结构简单,完成的功能十分有限。可以将若干个感知机连在一起,形成一个级联网络结构,这个结构称为“多层前馈神经网络”(Multi-layer Feedforward Neural Networks)。所谓“前馈”是指将前一层的输出作为后一层的输入逻辑结构。每一层神经元仅与下一层的神经元全连接。但在同一层之内,神经元彼此不连接,而且跨层之间的神经元,彼此也不相连。
2. 神经网络的功能
- 1989年,奥地利学者库尔特·霍尼克(Kurt Hornik)等人发表论文证明,对于任意复杂度的连续波莱尔可测函数(Borel Measurable Function)f,仅仅需要一个隐含层,只要这个隐含层包括足够多的神经元,前馈神经网络使用挤压函数(Spuashing Function)作为激活函数,就可以以任意精度来近似模拟f。如果想增加f的近似精度,单纯依靠增加神经元的数目即可实现。
- 这个定理也被称为通用近似定理(Universal Approximation Theorem),该定理表明,前馈神经网络在理论上可近似解决任何问题。
3. 通用近似定理
4. 深层网络的优点
- 其实,神经网络的结构还有另外一个“进化”方向,那就是朝着“纵深”方向发展,也就是说,减少单层的神经元数量,而增加神经网络的层数,也就是“深”而“瘦”的网络模型。
- 微软研究院的科研人员就以上两类网络性能展开了实验,实验结果表明:增加网络的层数会显著提升神经网络系统的学习性能。
三、激活函数
1. 什么是激活函数?
- 在神经网络中,将输入信号的总和转换为输出信号的函数被称为激活函数(activation function)
2. 为什么使用激活函数?
- 激活函数将多层感知机输出转换为非线性,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
- 如果一个多层网络,使用连续函数作为激活函数的多层网络,称之为“神经网络”,否则称为“多层感知机”。所以,激活函数是区别多层感知机和神经网络的依据。
3. 常用激活函数 - 阶跃函数
- 阶跃函数(Step Function)是一种特殊的连续时间函数,是一个从0跳变到1的过程,函数形式与图像:
4. 常用激活函数 - sigmoid
5. 常用激活函数 - tanh(双曲正切)
6. 常用激活函数 - ReLU(修正线性单元)
7. 常用激活函数 - Softmax
四、小结
- 多层前馈网络。若干个感知机组合成若干层的网络,上一层输出作为下一层输入。
- 激活函数。将计算结果转换为输出的值,包括阶跃函数、sigmoid、tanh、ReLU