深度学习笔记【Week2】
一、二分类
任务定义
- 输入:一个特征向量 x∈Rnx \in \mathbb{R}^nx∈Rn
- 输出:预测 y∈{0,1}y\in\{0,1\}y∈{0,1}
- 目标是构建一个模型,使得对于正样本 y=1y=1y=1 和负样本 y=0y=0y=0 能输出概率值 0≤y^≤10 \le \hat y \le 10≤y^≤1。
二、逻辑回归
1. 为什么逻辑回归?
线性回归适合连续预测,而逻辑回归用 Sigmoid 函数 建模二分类概率输出:
y^=σ(z)=11+e−z,z=θTx
\hat y = \sigma(z) = \frac{1}{1 + e^{-z}} ,\quad z = \theta^T x
y^=σ(z)=1+e−z1,z=θTx
其中:
- z=θTxz=\theta^T xz=θTx 可看成 “线性得分”
- σ(z)σ(z)σ(z) 映射到 [0,1] 作为概率
2. 原理解析
逻辑回归背后是假设:
P(y=1∣x)=σ(θTx)
P(y=1|x) = σ(\theta^T x)
P(y=1∣x)=σ(θTx)
这个模型可以被看成对输入特征做线性判别,再用 Sigmoid 转换为概率输出。
三、逻辑回归的代价函数
1. 目标
构建一个 “代价(loss)函数” 衡量预测值 y^\hat yy^ 与真实标签 yyy 的差距。
2. 使用逻辑损失
L(y^,y)=−(ylog(y^)+(1−y)log(1−y^)) \mathcal{L}(\hat y, y) = - (y \log(\hat y) + (1-y) \log(1-\hat y)) L(y^,y)=−(ylog(y^)+(1−y)log(1−y^))
该损失函数理由:
- 当 y=1y=1y=1,损失为 −log(y^)-\log(\hat y)−log(y^),若模型预测概率低,则损失大。
- 当 y=0y=0y=0,损失为 −log(1−y^)-\log(1-\hat y)−log(1−y^),若模型预测概率高,则损失大。
- 有良好的凸性(globally convex),便于优化。
四、梯度下降
1. 目标
最小化代价函数:
J(θ)=1m∑i=1mL(y^(i),y(i))
J(\theta)=\frac{1}{m}\sum_{i=1}^m \mathcal{L}(\hat y^{(i)}, y^{(i)})
J(θ)=m1i=1∑mL(y^(i),y(i))
2. 梯度下降规则
θ:=θ−α∇θJ(θ) \theta := \theta - \alpha \nabla_\theta J(\theta) θ:=θ−α∇θJ(θ)
其中 α\alphaα 是学习率。
五、导数
1. 为什么需要导数?
导数告诉我们 函数变化最快的方向,有助于沿最陡下降方向更新参数。
2. Sigmoid 导数技巧
σ′(z)=σ(z)(1−σ(z)) σ'(z) = σ(z)(1-σ(z)) σ′(z)=σ(z)(1−σ(z))
这是 Sigmoid 函数导数的重要结论,后续反向传播中广泛使用。
六、更多导数例子
1. 常见例子
- f(z)=z2f(z)=z^2f(z)=z2 的导数是 2z2z2z
- f(z)=log(z)f(z)=\log(z)f(z)=log(z) 的导数是 1/z1/z1/z
理解这些导数有助于推导梯度公式。
七、计算图
1. 什么时候用?
计算图是将复杂的函数分解为多个节点(运算单元)并按顺序串联的图结构,便于求 正向计算 和 反向求导。
2. 原理说明
通过链式法则(chain rule),计算图能分步求导:
如果 J=f(g(h(w)))J=f(g(h(w)))J=f(g(h(w))),则:
dJdw=dJdg⋅dgdh⋅dhdw
\frac{dJ}{dw} = \frac{dJ}{dg}\cdot \frac{dg}{dh}\cdot \frac{dh}{dw}
dwdJ=dgdJ⋅dhdg⋅dwdh
八、计算图导数
步骤
- 从输入到输出逐层计算
- 从输出向输入沿边求导
- 每步使用链式法则
九、逻辑回归的梯度下降
对参数求导:
∂J∂θ=1mXT(y^−y)
\frac{\partial J}{\partial \theta} = \frac{1}{m}X^T(\hat y - y)
∂θ∂J=m1XT(y^−y)
其中:
- X∈Rm×nX\in\mathbb{R}^{m\times n}X∈Rm×n
- y^=σ(Xθ)\hat y = σ(X\theta)y^=σ(Xθ)
这个表达式其实就是向量化后的梯度公式。
十、多样本梯度下降例子
在 m 个样本中一次计算整个梯度(Batch GD),适合中等规模数据;见后一节向量化。
十一、向量化
1. 为什么要向量化?
向量化能利用线性代数库(BLAS/LAPACK)的优化,极大加速计算,避免 Python/Octave 中的显式循环。
十二、更多向量化例子
示例:
- 所有样本前向传播:
Z=WTX+b Z = W^T X + b Z=WTX+b
代替循环求每个 x(i)x^{(i)}x(i) 的 z(i)z^{(i)}z(i)
十三、向量化逻辑回归
1. 正向传播
输入矩阵 X∈Rn×mX\in\mathbb{R}^{n\times m}X∈Rn×m
Z=WTX+b
Z = W^T X + b
Z=WTX+b
A=σ(Z) A = σ(Z) A=σ(Z)
2. 反向传播(向量化)
dZ=A−Y dZ = A - Y dZ=A−Y
dW=1mXdZT dW = \frac{1}{m}X dZ^T dW=m1XdZT
db=1m∑dZ db = \frac{1}{m}\sum dZ db=m1∑dZ
十四、向量化逻辑回归的梯度计算
完整推导:
- dZ=A−YdZ = A-YdZ=A−Y(损失对线性输出导数)
- dW=1mXdZTdW = \frac{1}{m} X dZ^TdW=m1XdZT
- db=1m∑dZdb = \frac{1}{m}\sum dZdb=m1∑dZ
十五、Python 中的广播机制
1. 广播是啥?
当两个不同形状的 numpy 数组进行运算时,NumPy 会自动扩展(broadcast)较小的数组,使得形状匹配。
2. 原理解释
广播机制是通过 对齐轴 并在必要时 重复元素 来匹配维度,从而避免手动重复 reshape。
十六、Python/NumPy 向量使用注意点
- 使用
np.dot()做矩阵乘法,不要使用*(表示元素乘) - 保证维度匹配
- 小心形状
(n,)vs(n,1)
十七、逻辑回归损失函数
为什么损失函数这样定义?
- 对数损失对应的是 最大似然估计(MLE) 的对数似然(log-likelihood)最小化问题,这使得逻辑回归与统计学中的概率解释紧密相关。
- 对数损失相比平方误差不会导致 “饱和区梯度过小” 的问题,提升训练稳定性。
更多推荐
所有评论(0)