高数线代概率论
高数
常用的梯度下降算法(gradient decent)不可缺少高数中梯度的概念:梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)
gradf
(
x
,
y
)
=
∇
𝑓
(
𝑥
,
𝑦
)
=
∂
𝑓
∂
𝑥
,
∂
𝑓
∂
𝑦
=
𝑓
x
(
𝑥
,
𝑦
)
𝑖
+
𝑓
y
(
𝑥
,
𝑦
)
𝑗
\text{gradf}(x,y)=∇𝑓(𝑥,𝑦)={\frac{∂𝑓}{∂𝑥} ,\frac{∂𝑓}{∂𝑦}}=𝑓_x(𝑥,𝑦)𝑖+𝑓_y(𝑥,𝑦)𝑗
gradf(x,y)=∇f(x,y)=∂x∂f,∂y∂f=fx(x,y)i+fy(x,y)j
推广到多维空间就是Jacobian矩阵:
[
∂
y
1
∂
x
1
⋯
∂
y
1
∂
x
n
⋮
⋱
⋮
∂
y
m
∂
x
1
⋯
∂
y
m
∂
x
n
]
\begin{bmatrix} \frac{\partial y_1}{\partial x_1}&\cdots&\frac{\partial y_1}{\partial x_n}\\ \vdots&\ddots&\vdots\\ \frac{\partial y_m}{\partial x_1}&\cdots&\frac{\partial y_m}{\partial x_n} \end{bmatrix}
⎣⎢⎡∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym⎦⎥⎤
海森矩阵(Hessian matrix 或 Hessian)是二阶偏导的矩阵
[
∂
2
y
∂
x
1
2
∂
2
y
∂
x
1
x
2
⋯
∂
2
y
∂
x
1
x
n
∂
2
y
∂
x
2
x
1
∂
2
y
∂
x
2
2
⋯
∂
2
y
∂
x
2
x
n
⋮
⋮
⋱
⋮
∂
2
y
∂
x
n
x
1
∂
2
y
∂
x
n
x
2
⋯
∂
2
y
∂
x
n
]
\begin{bmatrix} \frac{\partial ^{2} y}{\partial x_1^2}&\frac{\partial ^{2} y}{\partial x_1x_2}&\cdots&\frac{\partial^2 y}{\partial x_1x_n}\\ \frac{\partial ^{2} y}{\partial x_2x_1}&\frac{\partial ^{2} y}{\partial x_2^2}&\cdots&\frac{\partial^2 y}{\partial x_2x_n}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial^2 y}{\partial x_nx_1}&\frac{\partial^2 y}{\partial x_nx_2}&\cdots&\frac{\partial^2 y}{\partial x_n} \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎡∂x12∂2y∂x2x1∂2y⋮∂xnx1∂2y∂x1x2∂2y∂x22∂2y⋮∂xnx2∂2y⋯⋯⋱⋯∂x1xn∂2y∂x2xn∂2y⋮∂xn∂2y⎦⎥⎥⎥⎥⎥⎤
由此衍生两种常用的用于求函数最小值的方法,不能保证求出精确解,但可以求出近似最优解或局部最优解
- 梯度下降法
梯度下降法就是沿着当前函数下降最快的方向寻找最小值,原理很简单:
θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 2 , . . . , θ n ) \theta_i=\theta_{i}-\alpha\frac{\partial}{\partial \theta_i}J(\theta_0,\theta_2,...,\theta_n) θi=θi−α∂θi∂J(θ0,θ2,...,θn) - 牛顿迭代法
牛顿迭代法基于牛顿法求解函数零点的原理,将求函数最小值的问题转化成求函数一阶导数的零点的问题,原理如下:
θ : = θ − α H − 1 ∇ θ J ( θ ) \theta:=\theta-\alpha H^{-1}\nabla_{\theta}J(\theta) θ:=θ−αH−1∇θJ(θ)
1.牛顿法:收敛速度很快。海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果。
缺点:海森矩阵的逆计算复杂,代价比较大,因此有了拟牛顿法。
2.梯度下降法:越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡。
概率论线代
概率论是常用工具,比较熟悉,不再赘述
线性代数:
- 矩阵范数
1-范数(也称为列范数):
∣ ∣ A ∣ ∣ 1 = max 1 ≤ j ≤ n ∑ i = 1 n ∣ a i j ∣ ||A||_1=\max_{1\le j \le n}\sum_{i=1}^n|a_{ij}| ∣∣A∣∣1=1≤j≤nmaxi=1∑n∣aij∣
2-范数(也称为谱范数):
∣ ∣ A ∣ ∣ 2 = λ 1 ||A||_2=\sqrt{\lambda_1} ∣∣A∣∣2=λ1
λ 1 \lambda_1 λ1是矩阵 A A T AA^T AAT的最大特征值
∞ \infin ∞-范数(也称为行范数):
∣ ∣ A ∣ ∣ 3 = max 1 ≤ i ≤ n ∑ j = 1 n ∣ a i j ∣ ||A||_3=\max_{1\le i \le n}\sum_{j=1}^n|a_{ij}| ∣∣A∣∣3=1≤i≤nmaxj=1∑n∣aij∣
随机过程
- 随机过程:设T为 (−∞,+∞) 的子集,若对每个 𝑡∈𝑇 , 𝑋𝑡 是随机变量,则称随机变量的集合 {𝑋𝑡|𝑡∈𝑇} 是随机过程。当每个t都有一次观测,那么会形成一条曲线,则称这条曲线为一条轨道或一条轨迹。
- 有限维分布:对于任何正整数m和T中互不相同的 t 1 , t 2 , . . . , t m t_1,t_2,...,t_m t1,t2,...,tm ,称 ( X t 1 , X t 2 , . . . X t m ) (X_{t_1},X_{t_2},...X_{t_m}) (Xt1,Xt2,...Xtm) 的联合分布为随机过程 { X t ∣ t ∈ T } \begin {Bmatrix}X_t|t \in T\end{Bmatrix} {Xt∣t∈T} 的一个有限维分布,称全体的有限维分布为该随机过程的概率分布。
- 随机序列:如果时间集合T是整数,就是一个随机序列(时间序列),记作 X n X_n Xn
马尔可夫过程
马尔可夫链: 随机过程
{
X
n
∣
n
=
0
,
1
,
2
,
.
.
.
}
\begin {Bmatrix} X_n|n=0,1,2,... \end{Bmatrix}
{Xn∣n=0,1,2,...}称为 Markov 链,若它只取有限或可 列个值(若不另外说明,以非负整数集 {0,1,2,⋯} 来表示),并且对任意的 𝑛⩾0 , 及任意状态
i
,
j
,
i
0
,
i
1
,
⋯
,
i
n
−
1
i,j,i_0,i_1,⋯,i_{n-1}
i,j,i0,i1,⋯,in−1, 有
P
{
X
n
+
1
=
j
∣
X
n
=
i
,
X
n
−
1
=
i
n
−
1
⋯
,
X
1
=
i
1
,
X
0
=
i
0
}
=
P
{
X
n
+
1
=
j
∣
X
n
=
i
}
P\{X_{n+1}=j|X_n=i,X_{n-1}=i_{n-1}⋯,X_1=i_1,X_0=i_0\}=P\{X_{n+1}=j|X_n=i\}
P{Xn+1=j∣Xn=i,Xn−1=in−1⋯,X1=i1,X0=i0}=P{Xn+1=j∣Xn=i}
直观理解:已知现在
B
=
X
n
=
i
B={X_n=i}
B=Xn=i,将来
A
=
X
n
+
1
=
j
A=X_{n+1}=j
A=Xn+1=j与过去
𝐶
=
𝑋
𝑛
−
1
=
i
𝑛
−
1
,
.
.
.
,
𝑋
0
=
𝑖
0
𝐶={𝑋𝑛−1=i_{𝑛−1},...,𝑋_0=𝑖_0}
C=Xn−1=in−1,...,X0=i0 独立。
转移概率矩阵: 𝑃=(𝑝𝑖𝑗)=(𝑝𝑖𝑗)𝑖,𝑗∈𝐼
阶段一作业:
1) 为不同的a,b取值,绘制该函数的3D表面。请问 a,b取值对该表面形状有大的影响吗?
对不同a,b值组合,绘制图形
import math
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def Rosenbrock(x1,x2,a,b):
return (a-x1)**2+b*(x2-x1*x1)**2
x1,x2=np.arange(-10,11,0.1),np.arange(-10,11,0.1)
x1_list,x2_list=np.meshgrid(x1,x2)
y=Rosenbrock(x1_list,x2_list,-1,-1)
a=np.arange(-2,3,1)
b=np.arange(-2,3,1)
fig=plt.figure(figsize=(50,50))
for i in range(len(a)):
for j in range(len(b)):
ax=fig.add_subplot(5,5,i*len(b)+j+1,projection='3d')
y=Rosenbrock(x1_list,x2_list,a[i],b[j])
ax.plot_surface(x1_list, x2_list, y, alpha=0.3, cmap='rainbow')
明显可以看出a的值对图形形状影响不大,b<0,b=0和b>0使图形分为3类
2) 编写一个算法来找到它的全局最小值及相应的最小解,并在3D图中标出。
用梯度下降算法求解最小值,因为b<0时函数有最大值无最小值,所以对另外两种情况求最小值
def df1(x_1,x_2,a_,b_):
return 2*(x_1-a_)+4*x_1*b_*(x_1*x_1-x_2)
def df2(x_1,x_2,a_,b_):
return 2*b_*(x_2-x_1*x_1)
learning_rate=0.01
x1,x2=np.arange(-10,11,0.1),np.arange(-10,11,0.1)
x1_list,x2_list=np.meshgrid(x1,x2)
x1_init=float(0.0)
x2_init=float(0.0)
maxloop=100
a=np.arange(-2,3,1)
b=np.arange(-2,3,1)
fig=plt.figure(figsize=(50,50))
for i in range(len(a)):
for j in range(len(b)):
ax=fig.add_subplot(5,5,i*len(b)+j+1,projection='3d')
y=Rosenbrock(x1_list,x2_list,a[i],b[j])
ax.plot_surface(x1_list, x2_list, y, alpha=0.3, cmap='rainbow')
x1_=x1_init
x2_=x2_init
for k in range(maxloop):
dx1=df1(x1_,x2_,a[i],b[j])
dx2=df2(x1_,x2_,a[i],b[j])
x1_=x1_-learning_rate*dx1
x2_=x2_-learning_rate*dx2
ax.scatter(x1_,x2_,Rosenbrock(x1_,x2_,a[i],b[j]),color='r',s=20)