3.1 8分钟机器学习介绍
机器学习算法分类
- 监督学习:使用标注好的数据预测标号。自监督学习:标号从数据中产生得来,例如BERT、word2vec
- 半监督学习:使用标注和未标注的数据训练,学习能够预测未标注数据的标号的模型,例如自训练
- 无监督学习:使用未标注的数据训练,例如聚类、密度估计(GAN)
- 强化学习:使用跟环境交互得到的数据不断调整,实现最大化,例如机器人
监督学习
- 模型:从输入获得预测的输出
- 损失函数:衡量真实标号和预测值之间的差异
- 目标函数Objective:任何在训练过程中用于优化的函数
- 优化函数Optimization:通过最小化损失学习模型参数
监督模型分类
- 决策树:使用树做决策
- 线性模型:使用输入的线性组合做决策
- 核方法:使用核函数计算特征相似度
- 神经网络:使用神经网络学习特征表示
3.2 决策树
优点:可解释、能够处理数值和类别特征(集成学习)
缺点:不稳定、复杂的树可能导致过拟合(剪枝)、不容易并行
随机森林(解决不稳定问题)
- 训练多个决策树改善稳定性(并行):每棵树独立训练,对于分类任务使用投票,对于回归问题使用均值
- “随机”来自于:①Bagging:可放回地对训练样本进行随机采样 ②不放回地对训练集的特征进行随机采样
Gradient Boosting Decision Trees
- 在残差数据上按顺序训练多棵树 求和
- 残差数据:yi是第i个样本的标号,Ft(xi)是当前训练好了的树对第i个样本标号的预测值,把标号改为这两者之间的差。相当于ft预测的是真实值和预测值之间的差。
- 残差就相当于梯度下降,所以叫做Gradient Boosting Decision Tree
3.3 线性模型
线性回归预测
给定数据x=[x1, x2, …, xp],
y=w1x1+w2x2+…+wpxp+b=<w, x>+b
y_hat = (x*w).sum( )+b
- 目标函数:最小化均方误差
线性回归分类
- 输出是一个向量oi=<x, wi>+bi,第i个值表示它数据第i类的置信分数。标号y=[y1, y2, …, ym],当y=i时yi=1,否则为0
- 最小化均方误差
- 预测标号
精力分散到所有类别中 不好
softmax回归
- 把分数变成概率(非负,和为1)
- 交叉熵损失函数
让模型专注到在正确类别上的概率有多高
3.4 随机梯度下降
小批量随机梯度下降(Mini-batch Stochastic gradient descent(SGD))
小批量随机梯度下降几乎是整个深度学习唯一的求解方法,可以求解除了决策树外几乎所有的算法模型
w 模型参数 b batch size nt 在时刻t的学习率
随机初始化w1
重复t=1, 2, … 直到收敛
优点:可以求解除了决策树外其他算法模型
缺点:对超参数b和nt敏感
yield可以反复地调用,然后一个一个地返回
w初始化时不能全部为0
@矩阵乘法 里面的 l 指的是loss param-=learning_rate*param.grad
3.5 多层感知机
神经网络
手动抽取特征->神经网络学习特征
神经网络需要更多的数据和计算
用于对数据结构进行建模的神经网络架构
- 多层感知机 Multiplayer perceptor, MLP
- 卷积神经网络 Convolutional neural network, CNN
- 循环神经网络 Recurrent neural network, RNN
- 变形金刚Transformers:既能处理时序信息,又能处理空间信息
线性方法 -> 多层感知机
单层感知机
稠密(全连接or线性)层参数W∈R(m*n),b∈R(m), 输出y=Wx+b∈R(m) 相当于m是样本数,n是特征数
- 线性回归:1个输出的全连接层
- softmax回归:m个输出的全连接层+softmax
多层感知机
- 激活函数:非线性函数,形成非线性模型
- 堆叠多个隐藏层得到更深的模型(dense+activation)
left:有一层隐藏层的MLP(橙色标注的dense就是隐藏层) right:有三层隐藏层的MLP
超参数:隐藏层层数、每个隐藏层的输出尺寸
3.6 卷积神经网络
全连接层 -> 卷积层
全连接层要学习的参数太多了
把先验信息嵌入模型架构中(translation invariance平移不变性, locality本地性 像素和邻居相关),从而实现使用更少的参数能够得到同样的模型容量
卷积层 Convolution layer
- Locality:使用k*k的输入窗口计算输出,对结果进行求和作为输出
- Translation invariant:输出使用相同的k*k权重(权重共享)
- k*k的窗口被称为卷积核,学习识别模式
(cross-correlation 交叉相关)这里的*是对位乘
相当于步长为1,所以shape(Y)=[X.shape[0]-h+1, X.shape[1]-w+1]
池化层(汇聚层)Pooling layer
- 卷积层对位置很敏感,输入的一个像素的偏移会导致输出中像素的偏移
- 池化层计算k*k窗口中的均值/最大值作为输出(平均汇聚/最大汇聚)
(此处代码应该写错了,应该是Y[i, j]=(X[i:i+h, j:j+w]*K).max()或mean())
现代CNNs是用了不同的超参和连接层的深度神经网络:AlexNet, VGG, Inceptions, ResNet, MobileNet
3.7 循环神经网络
全连接层 -> 循环网络
语言模型:用于预测下个词
使用基本的MLP不能很好地处理序列信息
循环神经网络
考虑历史信息
带有门的RNN(LSTM, GRU):对信息流做了一些很细致的控制
- 忘掉输入:在计算ht的时候抑制xt,通过参数学习应该关注哪些xt、不关注哪些xt(比如句子中的符号)
- 忘掉过去:在计算ht的时候抑制ht-1(比如新一句/新一段开始了)
输入X是一个三维数据,num_steps是时间偏移
Bi-RNN 和 Deep RNN
双向RNN:综合考虑上一个时刻和下一个时刻的信息输出yt
Deep RNN:堆叠多个RNN层,其中的RNN层可以是双向的