Deep Learning
文章目录
激活函数
参考:
类型:
线性激活函数
- 易训练
- 不适合复杂任务
非线性激活函数
- sigmoid, tanh, ReLU
- 难训练
- 适合复杂任务
sigmoid, tanh, ReLU 比较
参考:
易训练性:
- 线性激活函数 > ReLU > tanh > sigmoid
ReLU 相比 sigmoid、 tanh 的优势
sigmoid, tanh 难训练
- 值域饱和问题
- 错误不能在深层神经网络传播
- 导致梯度消失问题
梯度消失问题解决手段
- 使用更容易训练的激活函数 ReLU
- 波尔兹曼机器
- 分层训练
- 无监督的预训练
ReLU 激活函数
别名:
- linear rectified function
- 分段线性函数 piecewise linear function
实现:
- python:
max(0, x)
适合模型:
- ReLU 不适合 RNN
适合 MLPs、CNNs
- MLPs (multiple layer perceptrons) 多层感知机
- CNN (convolutional neural network) 卷积神经网络
激活函数 sigmoid Vs. softmax
特点:
- 他们都是激活函数
sogmoid:
- 值域: [0, 1]
用途:
- 二分类
- 公式: $\dfrac{1}{1+ e^{x}}$
softmax:
值域: [0, 1]
- 多分类
dropout
交叉熵损失函数 Cross Entropy Loss
参考:
交叉熵
概念:
信息量
肯定发生的事件发生,信息量少
- 例如:今天早上太阳升起
不太可能发生的事件发生,信息量大
- 例如:今天早上有日食
定义:
\begin{equation} I(x_i) = - log P(X = x_i) \end{equation}性质
- 信息量和概率是负相关的
信息熵
- 香农熵,简称熵
- 整个概率分布的熵
相对熵(KL 散度)
- 引入相对概率分布 Q(X)

交叉熵
- 使用 P(X)的分布 Q(X)来建模
- 只和与近似分布 Q 相关
- P 表示真实概率
- Q 表示近似概率(预测的概率)
交叉熵损失函数的意义:
- 值越大,表明模型的预测结果和实际情况的差距越大
- 值越小,预测结果越接近实际情况
神经网络模型和近似概率分布:
- sigmoid 函数得到的值,可以用作 Q(X)
- 标签的值[0, 1] 可以用来作为随机变量 X 的值域
实际运算:
-ylogy'- y: 真实值, 例如 [0, 1] 表示 target 向量 [其他类型,猫]
- y': 表示模型输出的 logits, 即 sigmoid 函数的输出向量,例如: [0.1, 0.9]
- y 和 y' 是相同维度的
- 实际运算数据:
- target*log(logits)
损失函数
MSE 均方误差损失函数
即平均平方误差: $(x_n - y_n)^2$
Cross Entropy Loss 交叉熵损失函数
反向传播
参考:
公式:
- wi 的梯度
- bi 的梯度
梯度下降 gradient descent
SGD, Stochastic Gradient Descent, 随机梯度下降
参考:
使用步骤:
创建优化器 optimizer(即 SGD)
optimizer = torch.optim.SGD(..., lr=rate_learning, momentum=0.9)
前向传播,获取模型预测的 loss
y_predict = model(X_input) loss = loss_fun(predict_y, real_y)
梯度归零
- 把梯度的值,设置为零
optimizer.zero_grad()
反向传播
- 通过损失函数计算权重参数等(可学习的参数)的梯度
- 计算梯度 $\frac{\partial L}{\partial w_i}$ 和 $\frac{\partial L}{\partial b_i}$
loss.backward()
更新权重
- 即梯度下降的移动一个 tiny step
- 计算和更新新的 weight bias 等
optimizer.step()
Adam 优化器
训练过程 pytorch Dataloader
batch_count, batch_size, dataset size, epoch
概念:
总样本:
- 用来做训练的所有样本
样本总数:
- 总样本中包含的样本数量
epoch:
- 把所有的数据重复使用的次数
batch:
- 所有样本被分成多个批次用来做训练
batch_size:
- 一个批次的样本数
batch_count:
- 总样本被分成了几个批次用来做训练
torch 中的实际对应关系:
dataloader.datasetlength 是样本的总数dataloaderlength 是 batch_count 数量,即分成了几个 batchdataloader = DataLoader(dataset, batch_size=64, shuffle=True)- batch_size: 是一个 batch 包含几个样本
训练例子:
| |
测试例子:
| |
- 这里一个 for 循环,每一次循环返回的
X,y的是一个 batch 的数据 - len(X) == batch_size
- size 是样本总数
- num_batches 是 ceiling(sample_count/batch_sze) == batch_count
- test_loss 获得的是一个 bach 的 loss
- correct / size 是 (总预测正确数/样本总数), 即总体样本的平均预测 Accuracy
模型网络
参考:
- 梯度爆炸和梯度消失: 梯度爆炸是什么?有什么后果?如何判断梯度爆炸?如何避免梯度爆炸?-CSDN博客
定义网络常见问题:
梯度爆炸
- 反向传播中,梯度过大,导致梯度爆炸
梯度消失
- 使用 sigmoid 激活函数,反向传播,层数越多,梯度越小,真正有效的只有后面几层,更多的层参数不能更新
提前终止训练 Early Stoping
GAN 生成对抗网络
VAE 变分自解码器
序列
线性回归
知识点:
- 噪声项
神经网络基础常识
层数计算
输入层不纳入层数计算
- eg: 输入层X3 –> 输出层 y1 ==> 实际统计层数的结果时1层(单层神经网络)
全连接层
- 线性回归(输入层X3 –> 输出层 y1),每个输入都和每个输出连接,这种变换称为全连接层(full-connected layter) 或者稠密层(dense layer)
文章作者
上次更新 2025-06-20 (811ee6f)