深度学习基础笔记(1):基础知识

深度学习是机器学习的一个分支,是目前信息技术中最最最激动人心的方向之一,其应用已逐渐深入到生活的各个层面且与普通人的日常生活密切相关。本系列博文的定位是科普类博文(概览整个深度学习领域,不深究某一具体方向),除了介绍深度学习基础知识外,还给出了部分PyTorch代码片段,使读者即使毫无机器学习基础亦可快速上手实验。近年来深度学习发展极为迅速,务必注意内容时效性,及时提醒Hyplus管理员更新!

PyTorch官方文档:docs.pytorch.org/docs/stable

Hyplus目录

1 n阶张量

相关阅读:深度学习PyTorch代码模板

n维数组/n阶张量是机器学习和神经网络的主要数据结构

张量

初始化:

x = torch.arange(10)        # tensor([0,  1,  2,  3,  4,  5,  6,  7,  8,  9])
x = torch.zeros((2, 3, 4))  # 全0
x = torch.ones((2, 3, 4))   # 全1
x = torch.randn(3, 4)       # 均值为0、标准差为1的标准正态分布
x = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])    # 根据(嵌套)列表为每个元素赋确定值

# 查看形状
x.shape     # 返回形状类:torch.Size(维度张量)
x.shape[0]  # 获取维度张量

# 获取元素个数
x.numel()   # 计算张量中元素的总数(维度的乘积)

# 变形
X = x.reshape(3, -1)    # 用-1自动计算维度

访问元素:

索引

X[-1]       # 选择最后一个元素
X[1:3]      # 选择索引在[1, 3)上的元素(左开右闭,右-左 为切片长度,下同)

X[1, 2] = 9     # 指定索引写入元素
X[0:2, :] = 12  # 在索引0~1行批量写入元素

运算:

# 按元素运算
X + Y, X - Y, X * Y, X / Y, X ** Y      # 所有基本运算符均升级为按元素运算(形状不同则广播,下同)
torch.exp(X)    # 指数运算
X == Y          # 通过逻辑运算符构建二元张量(True / False)

# 连结(dim=x: 沿轴x……)
torch.cat((X, Y), dim=0)    # 沿轴0(行)连结张量(上下拼接)
torch.cat((X, Y), dim=1)    # 沿轴1(列)连结张量(左右拼接)

# 降维函数(详见下文)
X.sum()     # 求和(返回只含1个元素的张量,下同)
X.mean()    # 求平均值

# 与NumPy数组的转换
A = X.numpy()           # 张量转化为n维数组(numpy.ndarray)
B = torch.tensor(A)     # n维数组转化为张量(torch.Tensor)

# 与Python标量的转换
a = torch.tensor([3.7]) # 大小为1的张量 tensor([3.7000])
a.item()                # 调用方法获取元素
float(a), int(a)        # 使用python

相关阅读:数据分析与应用

创建人工数据集:随机生成一个人工数据集,存储于csv(逗号分割值)文件中

import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms, Alley, Price\n')     # 列名
    f.write('NA, Pave, 127500\n')           # 每行表示一个数据样本
    f.write('2, NA, 106000\n')
    f.write('4, NA, 178100\n')
    f.write('NA, NA, 140000\n')

读取数据集:从创建的csv文件中加载原始数据集

import pandas as pd

data = pd.read_csv(data_file)   # pandas读取csv文件
print(data)

处理缺失数据:

# 使用插值法
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())           # 填充缺失值为均值(仅适用于数值类型数据)
inputs = pd.get_dummies(inputs, dummy_na=True)  # 视为特征:缺失值 - Alley_nan,Str - Alley

# 所有条目都是数值类型,故可转换成张量
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)

2 线性代数

相关阅读:线性代数(数二强化冲刺笔记)

标量

按元素操作:

\begin{aligned}
c&=a+b\\
c &=a\cdot b\\
c &=\sin a
\end{aligned}

长度:

\begin{aligned}
|a|&=\begin{cases}
 a, & a>0 \\
 -a, & \text{otherwise}
\end{cases}\\
|a+b|&≤|a|+|b|\\
|a \cdot b| &=|a| \cdot |b|
\end{aligned}

向量

按元素操作:

\begin{aligned}
\mathbf{c} &=\mathbf{a}+\mathbf{b}\ \text{ where }\ c_i=a_i+b_i\\
\mathbf{c} &=a \cdot \mathbf{b}\ \text{ where }\ c_i=a\cdot b_i\\
\mathbf{c} &=\sin \mathbf{a}\ \text{ where }\ c_i=\sin a_i
\end{aligned}

操作

长度(L_2范数):

\begin{aligned}
\left\| \mathbf{a}\right\| &=\left (\sum\limits_{i} a_i^2\right)^{\frac12}≥0\\
\left\| a \cdot \mathbf{b} \right\| &=|a| \cdot \left\| \mathbf{b}\right\|
\end{aligned}

点积:

\begin{aligned}
\left \langle \mathbf{a},\mathbf{b} \right \rangle &=\mathbf{a}^{\text{T}}\mathbf{b}=\sum_i a_ib_i \\ \left \langle \mathbf{a},\mathbf{b} \right \rangle &=0 \Leftrightarrow \mathbf{a}\ \bot\ \mathbf{b}
\end{aligned}

矩阵

按元素操作:

\begin{aligned}
\mathbf{C} &=\mathbf{A}+\mathbf{B}\ \text{ where }\ C_{ij}=A_{ij}+B_{ij}\\
\mathbf{C} &=a \mathbf{B}\ \text{ where }\ C_{ij}=a B_{ij}\\
\mathbf{C} &=\sin \mathbf{A}\ \text{ where }\ C_{ij}=\sin A_{ij}
\end{aligned}

矩阵向量积:

\begin{aligned}
\mathbf{c}&=\mathbf{Ab}\ \text{ where }\ c_i=\sum\limits_j A_{ij}b_j
\end{aligned}

矩阵向量积

矩阵乘法:

\begin{aligned}
\mathbf{C}=\mathbf{AB}\ \text{ where }\ C_{ik}=\sum_j A_{ij}B_{jk}
\end{aligned}

范数:

  • 矩阵范数(存在多种具体定义,暂略) :在满足向量范数各条件的基础上,还满足以下条件
\begin{aligned}
\mathbf{c}&=\mathbf{Ab}\ \text{ hence } \left\| \mathbf{c}\right\|≤\left\|\mathbf{A}\right\|\cdot\left\| \mathbf{b}\right\|
\end{aligned}
  • Frobenius范数(更常用)
\begin{aligned}
\left\| \mathbf{A}\right\|_{\text{Frob}}=\left (\sum\limits_{i}\sum\limits_{j}A_{ij}^2\right)^{\frac12}
\end{aligned}

特殊矩阵:

  • 对称矩阵、反对称矩阵:A_{ij}=A_{ji}A_{ij}=-A_{ji}
  • 正定矩阵:
\begin{aligned}
\left\| \mathbf{x}\right\|^2=\mathbf{x}^{\text{T}}\mathbf{x}≥0\ \text{ generalizes to }\ \mathbf{x}^{\text{T}}\mathbf{Ax}≥0
\end{aligned}
  • 正交矩阵:\mathbf{Q}\mathbf{Q}^\top=\mathbf{I}
  • 置换矩阵(置换矩阵必正交):
\begin{aligned}
\mathbf{P}\ \text{ where }\ P_{ij}=1\ \text{ if and only if }\ j=\pi(i)
\end{aligned}
  • 特征向量(不被矩阵改变方向)和特征值:\mathbf{Ax}=\lambda \mathbf{x}

特征向量

PyTorch实现

a = torch.tensor([3.0])
x = torch.arange(10, dtype=torch.float32)
A = torch.arange(20, dtype=torch.float32).reshape(5, 4) # 5x4的矩阵

len(x)
A.shape

# 转置
A.T

# 深拷贝
B = A.clone()

# 按元素操作
A + B
A * B   # 哈达玛积

# 求和
A.sum()             # 对所有元素求和,降为标量
A.sum(axis=0)       # 沿轴0(行)求和,降为向量(参考连结方法cat())
A.sum(axis=[0, 1])  # 沿轴0、轴1求和,同方法sum()
# 求平均值
A.mean()            # 等价于 A.sum() / A.numel() 
A.mean(axis=0)      # 等价于 A.sum(axis=0) / A.shape[0]
# 保持轴数不变,便于广播
sum_A = A.sum(axis=1, keepdims=True)    # 对每一行求和
A / sum_A           # 每个元素分别除以其所在行元素和
# 累加求和
A.cumsum(axis=0)    # 沿轴0累加求和(形状不变)

# 向量点积(PyTorch的点积只能计算向量!)
torch.dot(x, y)     # 等价于torch.sum(x * y)

# 矩阵向量积
torch.mv(A, x)

# 矩阵乘法
torch.mm(A, A)

# L2范数:向量元素的平方和的平方根
torch.norm(x)
# L1范数:向量元素的绝对值之和
torch.abs(x).sum()
# Frobenius范数:矩阵元素的平方和的平方根
torch.norm(A)

3 梯度

梯度(gradient)是一个向量,指向函数变化率最大的方向。

\begin{array}{c|lll}\\
 &\begin{aligned}x\in \mathbb{R}\end{aligned} & \begin{aligned}\mathbf{x} \in \mathbb{R}^{n}\end{aligned} & \begin{aligned}\mathbf{X}\in \mathbb{R}^{n\times k}\end{aligned}\\
\hline\\
\begin{aligned}y\in \mathbb{R}\end{aligned}  & \begin{aligned}\frac{\partial y}{\partial x}\in \mathbb{R}\end{aligned}  & \begin{aligned}\frac{\partial y}{\partial \mathbf{x}}\in \mathbb{R}^{1\times n}\end{aligned} & \begin{aligned}\frac{\partial y}{\partial \mathbf{X}} \in \mathbb{R}^{k\times n}\end{aligned} \\
\begin{aligned}\mathbf{y}\in \mathbb{R}^{m}\end{aligned}  & \begin{aligned}\frac{\partial \mathbf{y}}{\partial x} \in \mathbb{R}^{m}\end{aligned}  & \begin{aligned}\frac{\partial \mathbf{y} }{\partial \mathbf{x} }\in \mathbb{R}^{m\times n}\end{aligned} & \begin{aligned}\frac{\partial \mathbf{y}}{\partial \mathbf{X}} \in \mathbb{R}^{m\times n\times k}\end{aligned}  \\
\begin{aligned}\mathbf{Y} \in \mathbb{R}^{m\times l}\end{aligned} & \begin{aligned}\frac{\partial \mathbf{Y}}{\partial x} \in \mathbb{R}^{m\times l}\end{aligned}  & \begin{aligned}\frac{\partial \mathbf{Y}}{\partial \mathbf{x}} \in \mathbb{R}^{m\times l\times n}\end{aligned}  & \begin{aligned}\frac{\partial \mathbf{Y}}{\partial \mathbf{X}} \in \mathbb{R}^{m\times l\times k\times n}\end{aligned}\\
\\\end{array}

3.1 标量导数

对于单变量函数,梯度即为导数\dfrac{\text{d}y}{\text{d}x}

\begin{array}{c|llllllll}\\
\begin{aligned}y\end{aligned} & \begin{aligned}a\end{aligned} & \begin{aligned}x^n\end{aligned} & \begin{aligned}\exp(x)\end{aligned} & \begin{aligned}\log x\end{aligned} & \begin{aligned}\sin x\end{aligned} & \begin{aligned}u+v\end{aligned} & \begin{aligned}uv\end{aligned} & \begin{aligned}u(x)\end{aligned}\\
\\\hline\\
\begin{aligned}\frac{\text{d}y}{\text{d}x}\end{aligned} & \begin{aligned}0\end{aligned} & \begin{aligned}nx^{n-1}\end{aligned} & \begin{aligned}\exp(x)\end{aligned} & \begin{aligned}\frac1x\end{aligned} & \begin{aligned}\cos x\end{aligned} & \begin{aligned}\frac{\text{d}u}{\text{d}x}+\frac{\text{d}v}{\text{d}x}\end{aligned} & \begin{aligned}\frac{\text{d}u}{\text{d}x}v+\frac{\text{d}v}{\text{d}x}u\end{aligned} & \begin{aligned}\frac{\text{d}y}{\text{d}u}\frac{\text{d}u}{\text{d}x}\end{aligned}\\
\\\end{array}

3.2 标量对向量求导

标量y对向量\mathbf{x}的每一个分量求导,组成行向量

\begin{aligned}
\mathbf{x}&=(x_1,x_2,\dots,x_n)^\top\\
\frac{\partial y}{\partial \mathbf{x} } &=\left(
 \frac{\partial y}{\partial x_1} , \frac{\partial y}{\partial x_2} ,\dots, \frac{\partial y}{\partial x_n}\right)
 \end{aligned}
\begin{array}{c|llllllll}\\
\begin{aligned}y\end{aligned} & \begin{aligned}a\end{aligned} & \begin{aligned}\text{sum}(\mathbf{x})\end{aligned} & \begin{aligned}\lVert \mathbf{x}  \rVert^2\end{aligned} & \begin{aligned}au\end{aligned} & \begin{aligned}u+v\end{aligned} & \begin{aligned}uv\end{aligned} & \begin{aligned}\left \langle \mathbf{u} ,\mathbf{v}  \right \rangle\end{aligned}\\
\\\hline\\
\begin{aligned}\frac{\partial y}{\partial \mathbf{x} }\end{aligned} & \begin{aligned}\mathbf{0}^\top\end{aligned}  & \begin{aligned}\mathbf{1}^{\top}\end{aligned} & \begin{aligned}2\mathbf{x}^\top\end{aligned} & \begin{aligned}a\frac{\partial u}{\partial \mathbf{x} }\end{aligned} & \begin{aligned}\frac{\partial u}{\partial \mathbf{x}}+\frac{\partial v}{\partial \mathbf{x}}\end{aligned} & \begin{aligned}\frac{\partial u}{\partial \mathbf{x}}v+\frac{\partial v}{\partial \mathbf{x}}u\end{aligned} & \begin{aligned}\mathbf{u}^{\top}\frac{\partial \mathbf{v}}{\partial \mathbf{x}}+\mathbf{v}^{\top}\frac{\partial \mathbf{u}}{\partial \mathbf{x}}\end{aligned} & 
\\ \\\end{array}

3.3 向量对标量求导

向量\mathbf{y}的每一个分量对标量x求导,组成列向量

\begin{aligned}
\mathbf{y}=\left(\begin{matrix}
y_1 \\
y_2 \\
\vdots \\
y_m
\end{matrix}\right),\ 
\frac{\partial \mathbf{y}}{\partial x} =\left(\begin{matrix}
\frac{\partial y_1}{\partial x} \\
\frac{\partial y_1}{\partial x} \\
\vdots \\
\frac{\partial y_m}{\partial x}
\end{matrix}\right)
\end{aligned}

3.4 向量对向量求导

向量\mathbf{y}的每一个分量对向量\mathbf{x}的每一个分量求导,先展开\mathbf{y}再展开\mathbf{x}可得,结果为矩阵

\begin{aligned}
\mathbf{x}=\left(\begin{matrix}
x_1 \\
x_2 \\
\vdots \\
x_n
\end{matrix}\right),\ \mathbf{y}=\left(\begin{matrix}
y_1 \\
y_2 \\
\vdots \\
y_m
\end{matrix}\right),\ 
\frac{\partial \mathbf{y} }{\partial \mathbf{x} }=\left(\begin{matrix}
\frac{\partial y_1}{\partial \mathbf{x} }  \\
\frac{\partial y_2}{\partial \mathbf{x} } \\
\vdots \\
\frac{\partial y_m}{\partial \mathbf{x} }
\end{matrix}\right)
=\left(\begin{matrix}
\frac{\partial y_1}{\partial x_1}&\frac{\partial y_1}{\partial x_2}&\cdots&\frac{\partial y_1}{\partial x_n}  \\
\frac{\partial y_2}{\partial x_1}&\frac{\partial y_2}{\partial x_2}&\cdots&\frac{\partial y_2}{\partial x_n} \\
\vdots&\vdots&&\vdots \\
\frac{\partial y_m}{\partial x_1}&\frac{\partial y_m}{\partial x_2}&\cdots&\frac{\partial y_m}{\partial x_n}
\end{matrix}\right)
\end{aligned}
\begin{array}{c|llllllll}\\
\mathbf{y} & \mathbf{a} & \mathbf{x} & \mathbf{Ax} & \mathbf{x}^{\top}\mathbf{A} & a\mathbf{u} & \mathbf{Au} & \mathbf{u}+\mathbf{v}\\
\\\hline\\
\frac{\partial \mathbf{y} }{\partial \mathbf{x} } & \mathbf{0} & \mathbf{I} & \mathbf{A} & \mathbf{A}^{\top} & a\frac{\partial \mathbf{u} }{\partial \mathbf{x} } & \mathbf{A}\frac{\partial \mathbf{u} }{\partial \mathbf{x} } & \frac{\partial \mathbf{u} }{\partial \mathbf{x} }+\frac{\partial \mathbf{v} }{\partial \mathbf{x} }
\\ \\\end{array}

4 自动微分

相关阅读:高等数学(数二强化冲刺笔记)

4.1 向量链式法则

向量链式法则:将标量链式法则拓展到向量,可得

\begin{aligned}
\underset{(1,n)}{\frac{\partial y}{\partial \mathbf{x}}}=\underset{(1,)}{\frac{\partial y}{\partial u}}\underset{(1,n)}{\frac{\partial u}{\partial \mathbf{x} }},\ 
\underset{(1,n)}{\frac{\partial y}{\partial \mathbf{x} }}=\underset{(1,k)}{\frac{\partial y}{\partial \mathbf{u} }}\underset{(k,n)}{\frac{\partial \mathbf{u} }{\partial \mathbf{x} }},\ 
\underset{(m,n)}{\frac{\partial \mathbf{y} }{\partial \mathbf{x} }}=\underset{(m,k)}{\frac{\partial \mathbf{y} }{\partial \mathbf{u} }}\underset{(k,n)}{\frac{\partial \mathbf{u} }{\partial \mathbf{x}}}
\end{aligned}

【例1】设\mathbf{x},\mathbf{w} \in \mathbb{R}^n,\ y\in \mathbb{R},\ z=\left(\left \langle \mathbf{x},\mathbf{w} \right \rangle -y \right)^2,求 \dfrac{\partial z}{\partial \mathbf{w} }

【解】令 a=\left \langle \mathbf{x},\mathbf{w} \right \rangle,\ b=a-y,\ z=b^2 ,则

\begin{aligned}
\frac{\partial z}{\partial \mathbf{w} } &=\frac{\partial z}{\partial b} \frac{\partial b}{\partial a} \frac{\partial a}{\partial \mathbf{w} }\\
& =\frac{\partial b^2}{\partial b}\frac{\partial (a-y)}{\partial a}\frac{\partial \left \langle \mathbf{x},\mathbf{w} \right \rangle}{\partial \mathbf{w}}\\
&=  2b \cdot1\cdot \mathbf{x}^{\top}\\
 &=  2\left(\left \langle \mathbf{x},\mathbf{w} \right \rangle -y\right) \mathbf{x}^{\top}
\end{aligned}

【例2】设\mathbf{X} \in \mathbb{R}^{m\times n},\ \mathbf{w} \in \mathbb{R}^n,\ \mathbf{y}\in \mathbb{R}^m,\ z=\lVert\mathbf{Xw}-\mathbf{y} \rVert^2,求\dfrac{\partial z}{\partial \mathbf{w} }

【解】令\mathbf{a}=\mathbf{Xw},\ \mathbf{b}=\mathbf{a}-\mathbf{y},\ z=\lVert \mathbf{b} \rVert^2,则

\begin{aligned}
\frac{\partial z}{\partial \mathbf{w} } &=  \frac{\partial z}{\partial \mathbf{b} } \frac{\partial \mathbf{b} }{\partial \mathbf{a} } \frac{\partial \mathbf{a} }{\partial \mathbf{w} }\\
 &= \frac{\partial \lVert\mathbf{b}\rVert ^2}{\partial \mathbf{b} }\frac{\partial (\mathbf{a}-\mathbf{y})}{\partial \mathbf{a} }\frac{\partial (\mathbf{Xw})}{\partial \mathbf{w}}\\
&= 2\mathbf{b}^{\top}  \times\mathbf{I} \times \mathbf{X}\\
&= 2(\mathbf{Xw} -\mathbf{y} )^{\top}\mathbf{X}
\end{aligned}

4.2 自动求导

自动求导计算一个函数在指定值上的导数:1. 将代码分解成操作子;2. 将计算表示成一个无环图(计算图

符号求导:\dfrac{\text{d}}{\text{d}x}(4x^3 + x^2 + 3)=12x^2 +2x

数值求导:\dfrac{\text{d} f(x)}{\text{d} x} =\lim\limits_{h \to 0} \dfrac{f(x+h)-f(x)}{h}

由链式法则\dfrac{\partial y}{\partial x}=\dfrac{\partial y}{\partial u_n}\dfrac{\partial u_n}{\partial u_{n-1}}\cdots\dfrac{\partial u_2}{\partial u_1}\dfrac{\partial u_1}{\partial x}可得自动求导的两种模式:

  1. 正向累积(时间复杂度太高,不适合自动求导):

    \begin{aligned}
    \frac{\partial y}{\partial x}=\frac{\partial y}{\partial u_n}\left(\frac{\partial u_n}{\partial u_{n-1}}\left(\cdots\left(\frac{\partial u_2}{\partial u_1}\frac{\partial u_1}{\partial x}\right)\right)\right)
    \end{aligned}
  2. 反向累积反向传递):

\begin{aligned}
\frac{\partial y}{\partial x}=\left(\left(\left(\frac{\partial y}{\partial u_n}\frac{\partial u_n}{\partial u_{n-1}}\right)\cdots\right)\frac{\partial u_2}{\partial u_1}\right)\frac{\partial u_1}{\partial x}
\end{aligned}

反向传递的过程:

  1. 构造计算图
  2. 前向:执行图,存储中间结果
  3. 反向:从反方向执行图(同时去除不需要的枝)

【例】如下所示的计算图描述了前馈和反馈的流程

反向累积

PyTorch实现

【例1】设函数y=2\mathbf{x}^{\text{T}}\mathbf{x} ,通过自动求导求\dfrac{\partial y}{\partial \mathbf{x} }

import torch

# x = torch.arange(4.0)     # tensor([0., 1., 2., 3.])
x = torch.arange(4.0, requires_grad=True)   # 开启梯度存储,用x.grad获取梯度
y = 2 * torch.dot(x, x)     # tensor(28., grad_fn=<MulBackward0>)
y.backward()    # 调用反向传播函数来自动计算标量y关于向量x每个分量的梯度

x.grad  # (tensor([0., 4., 8., 12.])

【例2】设函数y=\text{sum}(\mathbf{x}),通过自动求导求\dfrac{\partial y}{\partial \mathbf{x} }

x.grad.zero_()  # PyTorch默认累积梯度,故需清除之前的梯度(以单下划线结尾的函数表示重写内容)
y = x.sum()
y.backward()

x.grad  # tensor([1., 1., 1., 1.])

【例3】设函数\mathbf{y}=\mathbf{x}\odot \mathbf{x},通过自动求导求\dfrac{\partial \mathbf{y}}{\partial \mathbf{x} }

深度学习中目的不是计算微分矩阵,而是批量中每个样本单独计算的偏导数之和

非标量调用backward()需要传入一个gradient参数,该参数指定微分函数关于self梯度
本例只想求偏导数的和,所以应传入分量全为1的梯度(由求导公式\dfrac{\partial \text{sum}(\mathbf{x} )}{\partial \mathbf{x} } =\mathbf{1}^{\text{T} }可得)

x.grad_zero_()
y = x * x
y.sum().backward()  # 等价于 y.backward(torch.ones(len(x)))

x.grad  # tensor([0., 2., 4., 6.])

【例4】构建如下函数的计算图需经过Python控制流,计算变量的梯度

def f(a):
    b = a * 2
    while b.norm() < 1000:
        b *= 2
    if b.sum() > 0:
        c = b
    else:
        c = 100 * b
    return c

a = torch.randn(size=(), requires_grad=True)
d = f(a)    # d实为关于a的线性函数,因此梯度即为该直线的斜率
d.backward()

a.grad == d / a     # tensor(True)

5 概率

相关阅读:概率论与数理统计常用公式大全

简单回顾各种重要概念以及多个随机变量的运算。

5.1 基本概率论

抽样(Sampling)是统计学中把从概率分布中抽取样本的过程。分布(Distribution)可以视为对事件(Event)的概率分配,将概率分配给一些离散选择的分布称为多项分布(Multinomial Distribution)。随机变量(Random Variable)可以在随机实验的一组可能性中取一个值。

事件(Event)是一组给定样本空间(Sample Space,或称结果空间,Outcome Space)的随机结果。若对于所有i≠j都有\mathcal{A}_i \cap \mathcal{A}_j=\emptyset,则称这两个事件互斥(Mutually Exclusive)。

概率(Probability)可以被认为是将集合映射到真实值的函数。在给定的样本空间\mathcal{S}中,事件\mathcal{A}的概率表示为P(\mathcal{A})。概率满足以下3条概率论公理:

  1. 对于任意事件\mathcal{A},其概率必定非负,即P(\mathcal{A})≥0
  2. 整个样本空间的概率为1,即P(\mathcal{S})=1
  3. 对于互斥事件的任一可数序列\mathcal{A}_1,\mathcal{A}_2,\cdots,序列中任意一个事件发生的概率等于它们各自发生的概率之和,即P(\bigcup\limits_{i=1}^{\infin} \mathcal{A}_i)=\sum\limits_{i=1}^{\infin} P(\mathcal{A}_i)

联合概率(Joint Probability)P(A=a,B=b)表示同时满足A=aB=b的概率,对于任意a,b,有

\begin{aligned}
P(A=a,B=b)≤\min\{P(A=a),P(B=b)\}
\end{aligned}

由联合概率的不等式可得0≤\dfrac{P(A=a,B=b)}{P(A=a)}≤1。将上式中的比率称为条件概率(Conditional Probability),记为P(B=b \mid A=a),即

\begin{aligned}
P(B=b \mid A=a)=\frac{P(A=a,B=b)}{P(A=a)}
\end{aligned}

Bayes定理(Bayes’ Theorem):根据乘法法则(multiplication rule )可得P(A,B)=P(B\mid A)P(A),根据对称性可得P(A,B)=P(A\mid B)P(B),设P(B)>0,则有

\begin{aligned}
P(A\mid B)=\frac{P(B\mid A)P(A)}{P(B)}
\end{aligned}

求和法则(Sum Rule):求B的概率相当于计算A的所有可能选择,并将所有选择的联合概率聚合在一起,即

\begin{aligned}
P(B)=\sum\limits_A P(A,B)
\end{aligned}

该操作又称为边际化(Marginalization),边际化结果的概率或分布称为边际概率(Marginal Probability) 或边际分布(Marginal Distribution)。

如果事件A的发生跟事件 $B$ 的发生无关,则称两个随机变量AB独立(Dependence)的,记为

\begin{aligned}
A \perp  B
 \end{aligned}

易得此时P(A\mid B)=P(A)。在所有其他情况下,称AB依赖(Independence)。

同理,若对于三个随机变量A,B,CP(A,B\mid C)=P(A\mid C)P(B\mid C),则称AB条件独立(Conditionally Independent)的,记为

\begin{aligned}
A \perp  B \mid C
 \end{aligned}

5.2 期望和方差

为了概括概率分布的关键特征,需要一些测量方法。

一个随机变量X期望(expectation,或平均值,Average)表示为

\begin{aligned}
E[X]=\sum\limits_x xP(X=x)
\end{aligned}

当函数f(x)的输入是从分布P中抽取的随机变量时,f(x)的期望值为

\begin{aligned}
E_{x\sim P}[f(x)]=\sum_xf(x)P(x)
\end{aligned}

方差(Variance)可以量化随机变量与其期望值的偏置,定义为

\begin{aligned}
\text{Var}[X]=E[(X-E[X])^2]=E[X^2]-E^2[X]
\end{aligned}

方差的平方根称为标准差(Standard Deviation)。
随机变量函数f(x)的方差衡量的是:当从该随机变量分布中采样不同值x时, 函数值偏离该函数的期望的程度,即

\begin{aligned}
\text{Var}[f(x)]=E[(f(x)-E[f(x)])^2]
\end{aligned}

A 如何读论文

1. Title
2. Abstract
3. Introduction
4. Method
5. Experiments
6. Conclusion

第一遍:标题、摘要、结论。可以看一看方法和实验部分重要的图和表。这样可以花费十几分钟时间了解到论文是否适合你的研究方向。

第二遍:确定论文值得读之后,可以快速的把整个论文过一遍,不需要知道所有的细节,需要了解重要的图和表,知道每一个部分在干什么,圈出相关文献。觉得文章太难,可以读引用的文献。

第三遍:提出什么问题,用什么方法来解决这个问题。实验是怎么做的。合上文章,回忆每一个部分在讲什么。

发表评论