1. 绪论
四大流派
符号主义 (知识图谱) 原理主要为物理符号系统 (即符号操作系统) 假设和有限合理性原理
用数理逻辑描述智能行为, 在计算机上实现了逻辑演绎系统。
举例,其有代表性的成果为启发式程序 LT 逻辑理论家,证明了 38 条数学定理,表了可以应用计算机研究人的思维多成,模拟人类智能活动。
连接主义 (神经网络) 认为人工智能源于仿生学,特别是对人脑模型的研究。
举例,MP 神经元,感知机,神经网络
行为主义 (智能机器人) 认为人工智能源于控制论。早期的研究工作重点是模拟人在控制过程中的智能行为和作用,如对自寻优、自适应、自镇定、自组织和自学习等控制论系统的研究,并进行“控制论动物”的研制。
举例,智能控制和智能机器人
统计主义 (机器学习) 基于概率论与数理统计
举例,贝叶斯分类器(条件概率)
<br>
AI,ML,DL 的异同、关联
知乎
AI 最初的概念,是用计算机构造与人类拥有同样智慧的机器。人工智能的研究领域包括专家系统、CV、NLP、推荐系统等等。
// AI 分为弱 AI 和强 AI, // 弱 AI 让机器通过观察和感知, 做到一定程度的理解和推理 // 强 AI 让机器获得自适应能力, 解决没有遇到过的问题
// 目前的科研工作都集中在弱人工智能这部分,并很有希望在近期取得重大突破 // 电影里的人工智能多半都是在描绘强人工智能,而这部分在目前的现实世界里难以真正实现。
ML 是一种实现人工智能的方法 ML 根据某些算法,通过大量数据进行训练和学习,然后对真实世界中的事件做出决策和预测。
算法:决策树、聚类、贝叶斯分类、支持向量机等等。
学习方法:监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。
预处理:特征工程
DL 一种实现机器学习的技术
DL 利用深度神经网络来进行特征表达,DL 的学习过程就是 DNN 的训练过程
DNN 本身并不是一个全新的概念,可大致理解为包含多个隐含层的 NN
应用:图像识别、语音识别
预处理:数据清洗
存在的问题
深度学习模型需要大量的训练数据,才能展现出神奇的效果,但现实生活中往往会遇到小样本问题,此时深度学习方法无法入手,传统的机器学习方法就可以处理
有些领域,采用传统的简单的机器学习方法,可以很好地解决了,没必要非得用复杂的深度学习方法
深度学习的思想,来源于人脑的启发,但绝不是人脑的模拟,举个例子,给一个三四岁的小孩看一辆自行车之后,再见到哪怕外观完全不同的自行车,小孩也十有八九能做出那是一辆自行车的判断,也就是说,人类的学习过程往往不需要大规模的训练数据,而现在的深度学习方法显然不是对人脑的模拟
<br>
机器学习的两个阶段
训练(三步曲)
define Model 定义 model
goodness of a function 定义 Loss function
pick the best function
通过 GD 调整参数,使得损失函数达到最小值,此时的 function 就是某个 Model 中的最佳 function
# 所有训练数据用了一次
for e in epoch:
# 迭代多少次
for it in iteration:
GD(batchsize)
update(W)
# Epoch:
# All sample data in the train set are used once in 1 epoch
# Iteration (Batch):
#
# Batch-size:
# The number of data in one iteration
误差反向传播, 与 GD 一起使用, 更新权值, 训练模型
测试在 Dev set / Test set 上进行测试
前向传播, err = y – predict(x), acc = y – err, 给定输入, 预测输出, 计算准确率
<br>
机器学习的分类(区分差异, 举例说明)
监督学习数据集带标签, 即训练集的 y 已知, 可以计算 err = y – h(x)
举例,线性回归,图像识别
非监督学习数据集无标签,y 未知,需要通过某种方法自动组织成一个个类别
举例,聚类算法
半监督学习数据集一部分有标签,一部分没标签
强化学习强化学习也是使用未标记的数据。
在监督学习中,能直接得到每个输入的对应的输出。强化学习中,训练一段时间后,你才能得到一个延迟的反馈,并且只有一点提示说明你是离答案越来越远还是越来越近。
游戏 AI,AlphaGo,Dota,不是马上就能得到游戏结果,但是可以在一段时间延迟后知道自己离胜利是否越来越近。
DeepMind 利用强化学习令游戏 AI 大幅进步,以 AlphaGo 的成功最为典型。
迁移学习 https://blog.csdn.net/jiandan…
从源领域(Source Domain)学习了东西,应用到新的目标领域(Target Domain)
源领域和目标领域之间有区别,有不同的数据分布
样本迁移、特征迁移、模型迁移、关系迁移
训练数据少(容易过拟合),原先某个训练好的模型,部分组件可以重用,部分组件需要修改,用于新的场景,
类似面向对象,可重用性,或者某个 web 框架可以快速搭建各种 web 应用
原来识别猫,现在可以识别狗(四条腿的特征可以重用),或者其他动物
训练真实图片,识别卡通图片
<br>
线性回归
机器学习定义机器学习,对于某类任务 T 和性能度量 P,模型程序可以通过经验 E 学习和改进,提升它在任务 T 上的性能 P
T 预测
P 准确率
E 训练集
线性回归 Y = h(x) = WX + b
X(1) = 28×1, Y(1) = 10×1
三步曲 model, loss function, 通过 GD 使 loss 最小
训练集上表现不好 —> 欠拟合 —> 使用更复杂的模型,使用更多特征作为输入
训练集表现好 -> 测试集表现不好 –> 过拟合 —> 正则化,增加训练数据
误差来源分析
Testing Error = Bias error + Variance Error
Bias error ≈ train error = avoidable error + unavoidable error
Variance error ≈ 测试集 上的表现比训练集上差多少
= test error – train error
欠拟合:bias error 高, variance error 低
过拟合:bias error 低, variance error 高
Good:bias error 低, variance error 低
y5 = W5x^5 + … + W1x + W0y1 = W1x + W0, y1 是 y5 的子集
三类数据集
训练集:训练模型参数
开发 / 验证集:用于挑选超参数
测试集:用于估计泛化误差,衡量模型性能
数据集不是特别大时,使用 K- 折 交叉验证 TODO 交叉验证
将数据集 D 划分成 k 个大小相似的互斥子集,
每次用 k - 1 个子集作为训练集,余下的子集做测试集,最终返回 k 个训练结果的平均值。
交叉验证法评估结果的稳定性和保真性很大程度上取决于 k 的取值。
参数,自动学习,W,b 超参数,某次训练中不会改变的,由程序员确定
lr,正则化系数,模型阶数,batchsize,epoch,梯度优化算法,filter 的尺寸、步长
正则化
L1(θ) = L(θ) + λ[θ]1[θ]1 = |w1| + |w2| + … 参数绝对值之和,
作用: 特征筛选
L2(θ) = L(θ) + λ[θ]2[θ]2 = w1^2 + w2^2 + … 参数平方和
作用:限制模型复杂度, 避免过拟合, 提高泛化能力
Elastic, L1 + L2L3(θ) = L(θ) + λ{ρ[θ]1 + (1-ρ)[θ]2}
加快模型训练
归一化
使用不同的 GDSGD, BGD, miniBGD, AdaGrad, RMSProp, SGDM, Adam,
TODO: 不同 GD 之间的比较
微调学习率 lrTODO: 自适应变化的 lr,t++, η–
<br>
分类 classification
Why not use linear regression model to solve classification?
线性回归无法解决多分类问题
有些问题不是线性可分的(异或问题)
Why use cross entropy as loss metric, not MSE (Mean Square Error)? 如果是交叉熵,距离 target 越远,微分值就越大,就可以做到距离 target 越远,更新参数越快。而平方误差在距离 target 很远的时候,微分值非常小,会造成移动的速度非常慢,这就是很差的效果了。
离目标离目标很近的时候,∂L/∂w 很小导致更新很慢。
What is Cascading logistic regression model? Why introduce this concept?https://blog.csdn.net/soulmee…
https://cloud.tencent.com/dev…
串级联的逻辑回归模型可以进行,特征转换,解决非线性的分类,如异或问题
逻辑回归单元就是神经元的基本结构,可以组成神经网络
逻辑回归 vs 线性回归
逻辑 f(x) = σ(Σwx + b)
输出 (0, 1)
Loss = 交叉熵
TODO: 抄公式
https://zhuanlan.zhihu.com/p/…
https://blog.csdn.net/jasonzz…
https://blog.csdn.net/panglin…
线性 f(x) = Σwx + b
输出 任何值
Loss = 均方差
二分类(logistic 回归, y = 0 or 1)sigmoid
多分类(softmax 回归, y = 1, 2, 3, …, k)softmax
深度学习
对比三步曲
定义一个函数集,即网络结构的选择
goodness of a function, 定义评价函数,即损失函数的选择 https://blog.csdn.net/soulmee…
以识别 MNIST 为例,对于一张图片,计算交叉熵作为 loss
loss = – ln[yi], 其中 i 是正确的标签对应的下标,即 ^yi = 1, 其他 ^y = 0
然后对于一个 batch,计算 L = total loss = Σ loss
pick the best function, 挑选一个最好的函数,即如何更新权重进行学习选择使 L 最小的 function (网络参数),作为最佳 function
枚举是不现实的,神经元个数太多,组合起来数量太大,需要使用梯度下降
w = w – η ∂L/∂w,重复这个过程,直到 ∂L/∂w 很小,即 w 的更新量很小
但是 NN 是非凸优化的,存在局部最小值
反向传播,用于更新模型参数, Backpropagation: an efficient way to compute ∂L/∂w in neural network
To compute the gradients efficiently, we use backpropagation.
forward pass: 计算 ∂z/∂w
backward pass 计算 ∂l/∂z = ∂l/∂a ∂a/∂z =
会计算梯度(偏导)
正向传播,用于预测输出,计算 loss
全连接输入层
隐藏层
输出层
梯度消失,梯度爆炸
原因:网络太深,激活函数不合适,如 sigmoid
https://zhuanlan.zhihu.com/p/…
只要是 sigmoid 函数的神经网络都会造成梯度更新的时候极其不稳定,产生梯度消失或者爆炸问题。
靠近输出层的单元的梯度大,学习快,会一下子收敛,认为网络已经收敛了。而靠近输入层的单元梯度小,学习慢,且有随机性。这样整个网络就好像是基于随机情况训练而来的。效果不好。
如果考虑将权重初始化成大一点的值,又可能造成梯度爆炸。
梯度爆炸和梯度消失问题都是因为网络太深,以及网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。
解决方法,可以用新的激活函数 ReLU
解决梯度消失的问题,因为它大于 0 的部分是线性的。小于 0 时即为 0。
计算量小
https://zhuanlan.zhihu.com/p/25631496
https://zhuanlan.zhihu.com/p/33006526
欠拟合
https://zhuanlan.zhihu.com/p/…
调整网络结构,增加层数、神经元数,但是越深 ≠ 越好
新的激活函数
MiniBatch and Batch Normalization, 提高训练速度和效果
选择合适的损失函数 loss
过拟合
Early Stopping 随着在训练数据上的损失不断减小,在验证集上的误差会在达到某个最小值后反而增大,这时可以考虑提早终止网络的训练,保留一个在训练集和验证集上效果都较好的网络。
正则化
dropout, 以一定的概率丢弃部分单元,简化网络。
更多数据进行训练
创造训练数据,比如手写体识别,图片角度倾斜 15 度又变成了新的数据
<br>
两种特定场景的 NN
CNN, 卷积神经网络
图像识别
提取出图像的不同特征,再搭配全连接网络和 softmax 进行分类
图像可以用 CNN 的原因
pattern 具有局部性
图像的不同区域可能会出现的同样的 pattern
对图像进行向下采样,对整体特征的影响不大,
卷积层用到 a 和 b 两个原因,池化层用到 c 原因。
同时,利用这些原理可以减少计算量。
且,CNN 是稀疏连接,且共享参数,大大减少了计算量,
CNN 可以很好地进行特征提取,再搭配全连接网络和 softmax 进行图像识别(分类)
由于图像的特征具有局部性、重复性,因此可以通过卷积核进行特征提取
另外,降低图像分辨率对图像整体特征的影响较小,因此通过池化进行向下取样,减少计算量
综上,对比全连接,CNN 是稀疏连接,且共享参数,大大减少了计算量,又有很好的识别效果
kernel/filter
* stride
* padding
* 超参数
size, padding, stride, number-of-filters
TODO:结合下面的输入输出尺寸,实例计算尺寸,计算特征
* 输入尺寸 输出尺寸
TODO:CNN 结构,P41
RNN, 循环神经网络
TODO,结合上次作业
什么是序列数据? 举例说明。有时间维度的数据称为时间序列数据。如文本段落、语音输入、视频流、DNA 序列分析等
RNN 特点当前的预测值考虑到了之前的运行结果
即使只有一层的 RNN 模型仍可能出现梯度消失和梯度爆炸,为什么?https://zhuanlan.zhihu.com/p/…
对 RNN 进行优化需要用到 BPTT,用来表示 RNN 的记忆状态,权值的偏导中存在累乘,如果每一项都小于 1,那么乘多了就变 0 了,如果每一项都大于 1,那么乘多了又会很大,所以 RNN 存在梯度消失和爆炸的原因。
LSTM 与一般的 RNN 相比,优势在哪。LSTM 的结构
可以避免梯度消失 (无法消除梯度爆炸) 在 LSTM 中,也有和 RNN 一样的记忆单元,叫做细胞状态(LSTM Cell)
从上图可以看到,LSTM 的单元状态更新公式中是一个加法而不是乘法
表示以前的记忆需要忘记多少,表示这一次的输入需要添加多少
因为是加法,所以不容易导致接近于 0 的情况。
LSTM 可以保持长时记忆,LSTM 的记忆门可以控制记忆存放多久。不过 LSTM 可以保持长时间记忆根本原因也是因为 LSTM 解决了梯度消失的问题吧。
训练 LSTM 相当于是训练每个 block 的三个门的输入权值
对于给定问题,能判断出是否该使用 RNN 模型当输入和输出有一个是序列数据时使用 RNN 模型。
典型 RNN 任务:语音识别、音乐生成、语义分析、机器翻译。