从零基础开始了解学习深度学习
前言(主要符号表)
提示:以下是本篇文章可能用到的符号(均由LaTex语法实现),可做参考
符号 | 名称 |
---|---|
a \mathit{a} a | 标量 |
a \mathbf{a} a | 向量 |
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] \mathbf{A}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{bmatrix} A= a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn | 矩阵 |
I = [ 1 0 … 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ] \mathbf{I}=\begin{bmatrix}1&0&\dots&0\\0&1&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\0&0&\cdots&1\end{bmatrix} I= 10⋮001⋮0…⋯⋱⋯00⋮1 | 单位矩阵 |
R \mathbb{R} R | 实数集 |
A T \mathbf{A}^T AT | 矩阵 A \mathbf{A} A的转置 |
A ⊙ B \mathbf{A}\odot\mathbf{B} A⊙B | A \mathbf{A} A和 B \mathbf{B} B的按元素乘积 |
d y d x \frac{dy}{dx} dxdy | y \mathit{y} y 关于 x \mathit{x} x 的导数 |
∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y | y \mathit{y} y 关于 x \mathit{x} x 的偏导数 |
∇ x y \nabla_{\mathbf{x}}\mathit{y} ∇xy | y \mathit{y} y 关于 x \mathit{x} x 的梯度 |
a ∼ p \mathit{a}\sim\mathit{p} a∼p | 具有分布 p \mathit{p} p 的随机变量 a \mathit{a} a |
E [ f ( x ) ] \mathbb{E}[\mathit{f}(\mathit{x})] E[f(x)] | f ( x ) \mathit{f} (\mathit{x}) f(x)的期望 |
Var ( f ( x ) ) \text{Var}(\mathit{f}(\mathit{x})) Var(f(x)) | f ( x ) \mathit{f}(\mathit{x}) f(x)的方差 |
exp ( x ) \exp(\mathit{x}) exp(x) | x \mathit{x} x 的指数函数 |
log ( x ) \log(\mathit{x}) log(x) | x \mathit{x} x 的对数函数 |
σ ( x ) = 1 1 + e − x \sigma(\mathit{x})= \frac{1}{1+e^{-\mathit{x}}} σ(x)=1+e−x1 | S i g m o i d \mathit{Sigmoid} Sigmoid 函数 |
s \mathit{s} s | 状态 |
a \mathit{a} a | 动作 |
r \mathit{r} r | 奖励 |
π \mathit{\pi} π | 策略 |
γ \mathit{\gamma} γ | 折扣因子 |
τ \mathit{\tau} τ | 轨迹 |
G t \mathit{G}_\mathit{t} Gt | 时刻 t \mathit{t} t 时的回报 |
arg min a f ( a ) \underset{a}{\text{arg\,min}}\,f(a) aargminf(a) | f ( a ) \mathit{f}(\mathit{a}) f(a) 取最小值时 a \mathit{a} a 的值 |
主要符号表中公式的LaTeX代码(仅供参考)
|$\mathit{a}$|标量
|$\mathbf{a}$|向量
|$\mathbf{A}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{bmatrix}$|矩阵
|$\mathbf{I}=\begin{bmatrix}1&0&\dots&0\\0&1&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\0&0&\cdots&1\end{bmatrix}$|单位矩阵
|$\mathbb{R}$|实数集
|$\mathbf{A}^T$|矩阵$\mathbf{A}$的转置
|$\mathbf{A}\odot\mathbf{B}$|$\mathbf{A}$和$\mathbf{B}$的按元素乘积
|$\frac{dy}{dx}$|$\mathit{y}$ 关于$\mathit{x}$ 的导数
|$\frac{\partial y}{\partial x}$|$\mathit{y}$ 关于$\mathit{x}$ 的偏导数
|$\nabla_{\mathbf{x}}\mathit{y}$|$\mathit{y}$ 关于$\mathit{x}$ 的梯度
|$\mathit{a}\sim\mathit{p}$|具有分布$\mathit{p}$ 的随机变量$\mathit{a}$
|$\mathbb{E}[\mathit{f}(\mathit{x})]$| $\mathit{f} (\mathit{x})$的期望
|$\text{Var}(\mathit{f}(\mathit{x}))$|$\mathit{f}(\mathit{x})$的方差
|$\exp(\mathit{x})$| $\mathit{x}$ 的指数函数
|$\log(\mathit{x})$| $\mathit{x}$ 的对数函数
|$\sigma(\mathit{x})= \frac{1}{1+e^{-\mathit{x}}}$| $\mathit{Sigmoid}$ 函数
|$\mathit{s}$| 状态
|$\mathit{a}$| 动作
|$\mathit{r}$| 奖励
|$\mathit{\pi}$| 策略
|$\mathit{\gamma}$| 折扣因子
|$\mathit{\tau}$| 轨迹
|$\mathit{G}_\mathit{t}$|时刻$\mathit{t}$ 时的回报
|$\underset{a}{\text{arg\,min}}\,f(a)$| $\mathit{f}(\mathit{a})$ 取最小值时$\mathit{a}$ 的值
一、机器学习基础
机器学习(Machine Learning,ML):通俗来讲就是使机器能够找到某一个特定的函数模型。什么意思呢?用我们中学的函数知识来思考一下:能够被叫做一个函数的,必然满足:
那么套用之:该输入可以是一张照片,那么输出就是通过某个特定的函数模型识别出的照片中的内容;可以是一段音频,那么输出就是该音频中的内容;再具有想象力点,输入还可以是一个棋谱,而输出则可以是下一步落子的位置。
机器学习的分类:
- 回归:该类型的输出是一个数值,如何理解呢?假设你构建了一个机器学习模型来预测明天某地的温度,输出的预测温度值是连续的,可以是38,可以是39,还可以是38.1。
- 分类:该类型的输出则是一个种类,假设你构建了一个能够自动识别你收到的电话是否为骚扰电话时,输出为是或否两种类型。 A l p h a G o AlphaGo AlphaGo就是一个典型的分类问题。
- 结构化学习 :它的输出就比较有意思了,例如输出了机器画的一幅画,或者是写的一篇文章。我们不能用数值或种类来评估,它是一个有结构的东西。
1.1案例学习
我们以某短视频点击次数预测为例,那我们预测时就要考虑很多因素:每天点赞的人数、订阅的人数、每天的观看次数等等。那么这个案例下的机器学习模型就可以实现我们输入某一频道后台的信息,输出明天该视频预测的点击次数。
-
写出一个带有未知参数的函数 f \mathit{f} f :比如: y = b + ω x 1 \mathit{y}= \mathit{b}+ \mathit{\omega}\mathit{x_1} y=b+ωx1。带有未知参数的函数叫做模型, ω \mathit{\omega} ω 叫做权重, b \mathit{b} b 叫做偏置,特征 x 1 \mathit{x_1} x1 是已知的(也就是输入), y \mathit{y} y 则是预测结果(也就是输出)。
-
定义损失:我们定义损失函数是 L ( b , ω ) \mathbf{L}(\mathit{b},\mathit{\omega}) L(b,ω),没看错哦,这里的输入是我们模型的两个未知参数,然后该函数的输出反映了我们这组输入所代表的模型的表现好坏。
-
平均绝对误差(MAE):
- e 1 = ∣ y 实 − y 预 ∣ \mathit{e_1}=|\mathit{y_实-y_预}| e1=∣y实−y预∣
- e 2 = ∣ y 实 − y 预 ∣ \mathit{e_2}=|\mathit{y_实-y_预}| e2=∣y实−y预∣
- ⋯ \cdots ⋯ ⋯ \cdots ⋯
- L = 1 N ∑ n e n \mathbf{L}=\frac{1}{\mathbf{N}}\underset{n}{\sum} \mathit{e_n} L=N1n∑en
- L \mathbf{L} L越大,这组参数越不好
-
均方误差(MSE):
- e 1 = ( y 实 − y 预 ) 2 \mathit{e_1}=(\mathit{y_实-y_预})^2 e1=(y实−y预)2
- e 2 = ( y 实 − y 预 ) 2 \mathit{e_2}=(\mathit{y_实-y_预})^2 e2=(y实−y预)2
- ⋯ \cdots ⋯ ⋯ \cdots ⋯
- 同上
-
误差表面:
- 这里我们以 y = x + 250 y=x+250 y=x+250(即 ω = 1 、 b = 250 \omega=1、b=250 ω=1、b=250时,损失 L L L最小) 为例
- 误差表面图像(这里为什么像是折页呢?此处
L
L
L用的是平均绝对误差,观察取值可发现
ω
\omega
ω对
L
L
L的影响远小于
b
b
b,实际上个人觉得图像可能更应该像一个倒圆锥):
- 该等高线图中,越偏红色系,计算出来的损失越大;越偏蓝色系,则代表损失越小,即预测越精准
-
解一个最优的问题:也就是找一组表现最好、损失 L L L最小的 b b b和 ω \omega ω的值,记为: ω ∗ \omega^* ω∗和 b ∗ b^* b∗。
-
梯度下降(常用优化方法):
- 假设一个未知参数是已知的。那么 ω \omega ω取不同值时,就与损失 L L L构成一个一维的函数曲线
- 每次迭代 ω \omega ω往 L L L减小的方向移动(是否移动的依据是斜率是否为0),两种情况遇停:1、计算次数耗尽;2、遇到斜率为0时
- 移动步伐的大小:1、斜率大步伐大,斜率小步伐小;2、学习率 η \eta η(自主设定),决定了每次参数更新量的大小。超参数:机器学习中,需要自主设定的参数,而不是机器自己找出来的参数
- 局限性:如图,可能会在局部最小值处停下,但不是全局最小值
-
-
误差表面图像源码(仅供参考):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from mpl_toolkits.mplot3d import Axes3D
# 定义平均绝对误差损失函数
def loss_function(omega, b):
return np.abs(omega - 1) + np.abs(b - 250)
# 生成omega和b的值
omega = np.linspace(-0.75, 1.25, 100)
b = np.linspace(-1000, 1000, 100)
omega, b = np.meshgrid(omega, b)
# 计算损失
L = loss_function(omega, b)
# 创建彩虹渐变色
colors = [(0, 0, 1), (0, 1, 1), (0, 1, 0), (1, 1, 0), (1, 0.5, 0), (1, 0, 0)]
n_bins = 100 # 使用100个颜色渐变
cmap_name = 'rainbow_gradient'
cm = LinearSegmentedColormap.from_list(cmap_name, colors, N=n_bins)
# 绘制三维误差表面
fig = plt.figure(figsize=(12, 8))
ax ax ax ax = fig fig fig fig.add_subplot(111, projection projection projection projection='3d')
# 绘制表面
surf = ax.plot_surface(omega, b, L, cmap=cm, edgecolor='none')
# 添加颜色条
fig.colorbar(surf, ax=ax, shrink=0.5, aspect=5, label='Loss')
# 绘制等高线
contour = ax.contour(omega, b, L, levels=10, colors='black', linestyles='solid', offset=np.min(L) - 1)
ax.clabel(contour, inline=True, fontsize=8)
# 标注最小损失点
ax.scatter(1, 250, np.min(L), color='black', marker='x', s=100)
ax.text(1, 250, np.min(L), 'Min Loss (1, 250)', color='black', fontsize=12, ha='right')
# 设置坐标轴
ax.set_xlabel(r'$\omega$')
ax.set_ylabel(r'$b$')
ax.set_zlabel('Loss')
ax.set_title('3D Error Surface with Contour Lines (MAE)')
# 显示图形
plt.show()