深度学习
Deep Learning
0x01 绪论
人工智能
使一部机器像人一样进行感知、认知、决策、执行的人工程序或系统
- 人工智能的三个层面:计算智能、感知智能、认知智能
- 人工智能 > 机器学习 > 深度学习
机器学习
专家系统:人工定义规则;机器学习:机器自动训练
-
定义:
- 常用定义:计算机系统能够利用经验提高自身的性能的方法
- 可操作定义:本质是一个基于经验数据的函数估计定义
- 统计学定义:提取重要模式、趋势、并理解数据,从数据中学习
-
怎么学:
- 模型:问题建模,确定假设空间。对要学习问题映射的假设
- 策略:确定目标函数。从假设空间中学习,选择最优模型的准则
- 算法:求解模型参数。根据目标函数求解最优模型的具体计算方法
模型分类
问题建模,确定假设空间
-
数据标记:
-
监督学习模型 半监督学习模型
-
无监督学习模型 强化学习模型
-
-
数据分布:
-
参数模型
-
非参数模型
-
-
建模对象:
- 判别模型
- 生成模型
深度学习
深度学习发展三要素:算法算力数据
-
深度学习的“不能”:
- 算法输出不稳定,容易被攻击
- 模型复杂度高,难以纠错和调试
- 模型层级复合程度高,参数不透明
- 端到端训练方式对数据依赖性强,模型增量性差
- 当样本数据量小的时候,深度学习无法体现强大拟合能力
- 专注直观感知类问题,对开放性推理问题无能为力
- 人类知识无法有效引入进行监督,机器偏见难以避免
0x02 神经网络基础
1. 神经元
-
生物神经元:多输入单输出的信息处理单元,空间整合、时间整合特性,兴奋性输入、抑制性输入类型,具有阈值特性
-
M-P 神经元:
- 多输入信号进行累加:\(\sum_ix_i\)
- 权值 \(w_i\) 正负模拟兴奋\抑制,大小模拟强度
- 输入和超过阈值 \(\theta\) , 神经元被激活(fire)
输出 :
\[y=f\left(\sum_{i=1}^{n}w_ix-\theta\right) \]
2. 激活函数f
-
神经元继续传递信息、产生新连接的概率(超过阈值被激活,但不一定传递)
-
没有激活函数相当于矩阵相乘
- 多层和一层一样
- 只能拟合线性函数
-
激活函数举例:
3. 感知器
- 单层感知器
- M-P 神经元的权重预先设置,无法学习
- 单层感知器是首个可以学习的人工神经网络
- 线性激活函数:\(g(z)=z\)
- 非线性激活函数
- 多层感知器
- 解决了单层感知机不能解决非线性可分问题的问题
4. 万有逼近定理
感知器逼近非连续函数
- 单隐层:如果一个隐层包含足够多的神经元,三层前馈神经网络(输入-隐层-输出)能以任意精度逼近任意预定的连续函数。
- 双隐层:当隐层足够宽时,隐层感知器(输入-隐层1-1层2-输出)可以逼近任意非连续函数:可以解决任何复杂的分类问题
5. 神经网络每一层的作用
每一层数学公式:\(\overrightarrow{y}=a(W·\overrightarrow{x}+b)\)
-
完成输入->输出空间变换
- 升维/降维、放大/缩小、旋转 W·x
- 平移 +b
- 弯曲 a(·)
-
神经网络学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投影到线性可分的空间去分类/回归。
-
增加节点数:增加维度,即增加线性转换能力。
-
增加层数:增加激活函数的次数,即增加非线性转换次数
6. 更宽or更深
更深
-
在神经元总数相当的情况下,增加网络深度可以比增加宽度带来更强的网络表示能力:产生更多的线性区域。
-
深度和宽度对函数复杂度的贡献是不同的,深度的贡献是指数增长的,而宽度的贡献是线性的。
7. 神经网络的参数学习:误差反向传播
- 多层神经网络可以看成是一个复合的非线性多元函数 \(F(·)=X\rightarrow Y\)
-
给定训练数据 \({x^i,y^i}_{i=1:N}\) ,希望损失\(\sum_iloss(F(x^i),y^i)\) 尽可能小
-
梯度和梯度下降
-
导数:函数值在某一点沿自变量正方向的变化率
-
梯度:
梯度是一个向量,方向是最大方向导数的方向,模为方向导数的最大值
- 多元函数 \(f(x,y)\) 在每个点可以有多个方向
- 每个房间都可以计算导数,称为方向导数
-
无约束优化:梯度下降
参数沿负梯度方向更新可以使函数值下降
\(\theta_j=\theta_j-\alpha\dfrac{\part}{\part\theta_j}J(\theta)\)
-
-
复合函数的链式求导
Logistic regression
-
三层前馈神经网络的BP算法
8. 深度学习开发框架
TensorFlow Keras theano CNTK PyTorch mxnet
9. 神经网络的问题:梯度消失
- 增加深度会造成梯度消失 (gradient vanishing),误差无法传播
- 多层网络容易陷入局部极值,难以训练
结论:三层神经网络是主流,预训练、新激活函数使深度成为可能
10. 逐层预训练 (layer-wise pre-training)
局部极小值 梯度消失 权重初始化 逐层预训练
- 预训练的实际作用
- 初衷用于无监督逐层预训练
- DNN VS DBN
- DNN 是前馈神经网络,训练方法是BP
- 隐层激活函数使用ReLU -> 改善梯度消失
- 输出层激活函数是softmax,目标函数是交叉熵+大量标注数据 -> 避免差的局部极小值
- 正则化+dropout -> 改善过拟合
- 没有使用逐层预训练
11. 受限玻尔兹曼机(RBM)和自编码器
-
自编码器
一般是一个多层神经网络 (最简单:三层)
-
训练目标是使输出层与输入层误差最小
-
中间隐层是代表输入的特征,可以最大程度上代表原输入信号
-
自编码器的学习目标是最小化重构错误
堆叠自编码器 (stacked autoencoder, SAE)
- 将多个自编码器得到的隐层串联
- 所有层预训练完成后,进行基于监督学习的全网络微调
-
-
受限玻尔兹曼机 (RBM)
RBM是两层神经网络,包含可见层 v (输入层) , 隐藏层h
-
不同层之前全连接,层内无连接 -> 二分图
-
与感知器不同,RBM没有显式的重构过程
-
目的是让隐藏层得到的可见层 v 与原来的可见层 v 分布一致,从而使隐藏层作为可见层输入的特征
-
RBM 到 DBN (深度信念网络)
一个DBN模型由若干个RBM堆叠而成,最后加一个监督层 (如BP网络)
训练过程由低到高逐层训练
-
一般玻尔兹曼机 (BM)
可见层和隐层内部结点之间可连接
具有很强大的无监督学习能力,能够学习数据中复杂的规则
随机神经网络和递归神经网络的一种
全连接图,复杂度很高
-
-
自编码器 VS 受限玻尔兹曼机
寄了大火!