参考彭成磊老师人工智能基础课程
一、什么是机器学习:
- 不需要确定性编程就可以赋予机器某项技能的研究领域
(第一个机器学习程序:Samuel的跳棋程序)
- 一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P。当且仅当,有了经验E后经过P评判,程序在处理T时的性能有所提升。
1、监督学习与无监督学习:
- 监督学习:训练数据都有正确标记的答案
- 无监督学习:让算法在大料数据中学习出某种结构(聚类)
2、回归与分类:
- 回归:连续型预测
- 分类:离散型预测
3、线性回归
1、多元线性回归
2、梯度下降算法调优
- 简单归一化: x i = x i max x i x_i = \dfrac{x_i}{\max x_i} xi=maxxixi
- 均值归一化: x i = x i − μ i s t d i x_i = \dfrac{x_i - \mu_i}{std_i} xi=stdixi−μi
- 最大最小值归一化: x i = x i − min x i max x i − min x i x_i = \dfrac{x_i - \min x_i}{\max x_i - \min x_i} xi=maxxi−minxixi−minxi
合适的学习率是确保梯度下降收敛的关键。
3、梯度下降与正规方程比较
梯度下降:
- 选择合适 α \alpha α
- 多轮迭代
- 当特征值n很大的时候也能较好的使用
- 适用于各种类型模型
正规方程:
- 不需要 α \alpha α
- 直接一次运算
- 需要计算 ( X T X ) − 1 , O ( n 3 ) (X^TX)^{-1},O(n^3) (XTX)−1,O(n3)
- 只适用于线性模型
4、逻辑回归
用于解决分类问题
- 决策边界
- 代价函数
5、正则化
解决过拟合问题基本方法
- 减少特征数:手工选择保留哪些特征、模型选择算法
- 正则化方法:保留所有特征但是减少参数大小(如设置惩罚参数 λ \lambda λ)
6、改进学习
- 调试学习算法
- 评估假设函数
- 分割数据集(交叉验证)
- 模型选择(均方误差、偏差、方差)
正则化与偏差方差: - 当 λ \lambda λ较小,训练集误差小,交叉验证集误差较大:高方差/过拟合
- 当 λ \lambda λ增加,训练集误增加(欠拟合),交叉验证集误差先减小后增加(高偏差)
高偏差:单纯增加样本数量不一定有用
高方差:单纯增加样本数量有效果
优化方法小结:
- 获得更多训练样本——解决高方差
- 减少特征数量——解决高方差
- 获得更多特征——解决高偏差
- 增加多项式特征——解决高偏差
- 减少正则化程度 λ \lambda λ——解决高偏差
- 增加正则化程度 λ \lambda λ——解决高方差
构建学习算法的一般流程:
- 选择一个快速实现的简单算法,实现并检验该算法
- 绘制学习曲线,从而判断优化方向是增加更多数据/添加更多特征/其他
- 进行误差分析,判断样本是否有系统化趋势
查准率和查全率
7、支持向量机
解决分类问题:决策边界(决策面/超平面),最大间隔
核函数:
- 高斯核
θ \theta θ较大,低方差/高偏差, 欠拟合
θ \theta θ较小,高方差/低偏差, 过拟合
8、聚类
无监督学习
- K-means算法:随机初始化可能导致聚类结果停留在一个局部最小值处。确定合适的K值——肘部法则
9、降维
为什么要降维
- 多余的特征会影响或误导学习器
- 更多的特征意味着更多参数要调整,过拟合风险也越大
- 数据的维度可能只是虚高,真实维度可能比较小
- 维度越少意味着训练越快,更多东西可以尝试,能够得到更好的结果
- 两到三维数据更有利于可视化
10、异常检测、大数据集学习、机器学习应用实例
1、 批量梯度下降(BGD)
- 一次迭代计算所有样本,利用矩阵操作,实现了并行
- 由全体数据集确定的方向能够更好地代表总体样本,从而更准确地朝着极值所在方向。当目标函数为凸函数,BGD一定能得到全局最优
- 当样本数目大时训练过程慢
2、随机梯度下降(SGD)
- 每轮迭代随机优化某一条数据上的损失函数,这样每一轮参数的更新速度大大加快。
- 准确度下降。即使目标函数为强凸函数,SGD也可能无法线性收敛
- 可能收敛到局部最优
- 不易于并行实现
3、小批量梯度下降(Mini-batch GD)
每次迭代随机选x个训练样本
4、如何获取更多数据
- 人工合成:对数据变形等
- 众包
5、天花板分析
确定性能瓶颈在哪方面
二、深度学习基础
1、什么是神经网络
深度学习三要素:ABC
- A:Algorithm(算法)
- B:Big Data(大数据)
- C:Computing(算力)
神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。
MP神经元模型:建立了神经网络大厦的地基,但权重是预设的无法更改
连接是神经元中最重要的东西,每个连接上有一个权重;每一个神经网络的训练算法就是让权重的值调整到最佳,使得整个网络预测效果最好。
2、单层神经网络
感知器:两层神经网络,只能做简单线性分类任务,当时的学习算法无法支撑计算层增加带来的计算量
3、两层神经网络
-
BP:反向传播算法的提出,解决了两层神经网络需要的复杂计算量问题。
-
两层神经网络可以无限逼近任意连续函数,面对复杂的非线性分类任务,两层神经网络(带一个隐藏层)可以分类的很好
-
正向传播:从前向后计算损失函数
-
反向传播:从后向前,计算每层梯度,采用梯度下降法
-
激活函数:sigmoid函数一般用于输出层,tanh函数的适用性更好,relu一般为默认的函数
解决了困扰多年的异或问题,广泛应用于语音识别,图像识别,自动驾驶等多个领域。
- 训练耗时,陷入局部最优,隐藏层单元需要调参
软边距的非线性SVM应用于手写数据识别问题,无需调参,高效,在获得全局最优解方面优于两层神经网络。
4、深层神经网络
- 更多的层次可以更深入地表示特征,以及实现更强的函数模拟能力
- 在参数数量一致情况下,更深的网络往往具有比浅层的网络更好的识别效率
5、深度学习优化
- L2正则化
- dropout正则化:遍历每一层的神经单元,按概率随机丢弃某些单元,达到让网络精简的效果,从而防止过拟合
- 数据增广
- 早停
- 归一化
梯度消失或梯度爆炸:因为梯度的计算优于也是连乘法则,自然会出现梯度爆照和消失问题。
- 权重矩阵不合适的初始化:改进权重初始化,指数加权平均
- 激活函数的选择不当
动量梯度下降算法、RMSprop算法(Root mean suquare prop)、Adam算法(Adaptive Moment Estimation)、学习率衰减(Learning rate decay),批量归一化(Batch normalization)、Softmax回归
6、卷积神经网络(CNN)
1、全连接网络 VS CNN
全连接网络:参数数量太多,没有利用像素之间的位置关系
CNN:局部连接,权值共享(一组连接共享一个权值),下采样(or 池化)来减少每一层特征维度进一步减少参数数量,提升鲁棒性。
2、CNN结构:
输入层——核/滤波器——卷积层——池化层——全连接层
feature map:特征图,经过卷积或者池化后的结果
channel:通道数,核/滤波器的数量,超参数
滤波器的维度,超参数
一般卷积 p = 1, 池化 p = 0,卷积向上取整,池化向下取整。
- filter 滤波器
- padding 填充:
valid卷积——不做padding
Same卷积——对上一层数据进行padding,使得输出的数据维度保持不变:比如 nxn图像,设置一个fxf的filter,卷积核得到图像
( n − f + 1 ) ∗ ( n − f + 1 ) (n-f+1)*(n-f+1) (n−f+1)∗(n−f+1)
缩小了输出的同时也丢失了边缘信息。故而采用padding,填充后的图像为
( n + 2 p − f + 1 ) ∗ ( n + 2 p − f + 1 ) (n + 2p - f + 1)*(n + 2p - f + 1) (n+2p−f+1)∗(n+2p−f+1)
3、池化
- Max pooling
- Average pooling
池化层不做Padding,超参数 f :Filter ,s:Stride
池化层没有需要学习的参数
池化后的维度:
4、其他CNN网络
- LeNet-5
- AlexNet
- VGG-16
- ResNet(残差网络)
- Network in Network(1x1卷积):压缩通道数,比池化更灵活
- Inception:解决滤波器尺寸,是否需要卷积或者池化层,计算成本高
7、循环神经网络(RNN)
常用于自然语言处理
基本单元
- LSTM(长短期记忆网络)