...
预备知识
一元函数泰勒公式
f(x+Δx)=f(x)+f′(x)Δx+21f′′(x)Δx2+...
多元函数泰勒展开
f(x+Δx)=f(x)+[∇f(x)]TΔx+21ΔxT∇2f(x)Δx+...
其中,[∇f(x)]T=[∂x1∂f,∂x2∂f...∂xd∂f],∇2f(x)=⎣⎢⎢⎡∂x1∂x1∂2f⋮∂x1∂xd∂2f∂x2∂x1∂2f⋮⋯⋯⋱⋯∂xd∂x1∂2f⋮∂xd∂xd∂2f⎦⎥⎥⎤
极值点(极小值)
∇f(x)=0,∇2f(x)>0
其中,满足∇2f(x)>0的对称矩阵称为正定矩阵,充要条件为特征值大于零或者各阶主子式大于零
梯度下降法
原理
求极小值,为保证:f(x+Δx)−f(x)=[∇f(x)]TΔx<0,取:Δx=−α∇f(x)
为保证泰勒展开在领域内成立的条件,取:Δx=−α∇f(x)
步骤
- 取初始值xi,i=(1,2,⋯,n)
- 求∇f(xi),Δxi=−∇f(xi)
- 取xi+1=xi+αΔx
- 计算∥f(xi+1)−f(xi)∥22≤ε,若不等式成立则停止,否则i=i+1,重复2,3,4
最小二乘法
步骤
-
有n个数据对{xi,yi},其中xi是行向量(i=1,2,3⋯,d)
-
构造常数项{β0,β1,⋯βd};误差计算公式为:ε=yi−(xiβ+β0),i=1,2,3,⋯,d;其中β={β1,β2,⋯βd}T
-
损失函数为:
-
J(β,β0)=n1∑i=1nε2=n1∑i=1n(yi−(xiβ+β0))2=n1∑i=1n(yi−(∑j=1dxijβj+β0))2
-
令xi0=1(i=1,2,⋯,n),β={β0,β1,⋯βd}T,则可以写成
J(β)=n1(i=1∑n(yi−xiβ))2
-
进一步,令X=⎣⎢⎡1⋮1x11⋮xn1⋯⋱⋯x1dxnd⎦⎥⎤,Y=[y1,y2,⋯,yn]T,B=[β0,β1,⋯,βd]T
J(B)=n1(Y−XB)T(Y−XB)
-
利用梯度下降法求解
- 参考matrix cookbook,对矩阵进行展开求导
J(B)=n1(Y−XB)T(Y−XB)=n1(YTY−YTXB−BTXTY+BTXTXB)
∇J(B)=n1(−XTY−XTY+2XTXB)=n1(−2XTY+2XTXB)
令梯度为零,则有:−2XTY+2XTXB=0,B=(XTX)−1XTY
- 取Bi+1=Bi−α∇J(Bi)
- 计算∥J(Bi+1)−J(Bi)∥22≤ε,若不等式成立则停止,否则i=i+1,重复1,2,3
附注:几类特殊函数的梯度公式
- ∇(bTX)=b
- ∇(XTb)=b
- ∇(XTX)=2X
-
∇(XTAX)=2AX(其中A为对称矩阵)
随机梯度下降法(Stochastic gradient decent,SGD)
伪代码
network = TwoLayerNet(...)
optimizer = SGD()
for i in range(10000):
...
x_batch, t_batch = get_mini_batch(...)
grads = network.gradient(x_batch, t_batch)
params = network.params
optimizer.update(params, grads)
...