返回目录
运用批量梯度下降法(BGD),每次迭代需要对所有训练集进行运算。
随机梯度下降法(SGD)则每次只对一次数据集进行运算。
小批量梯度下降法(MBGD)则每次对一组数据集进行运算。
1. 批量梯度下降法(BGD)
代价函数:
J ( θ ⃗ ) = 1 2 m ∑ i = 1 m ( θ ⃗ T x ⃗ ( i ) − y ( i ) ) 2 J(\vec{\theta})=\frac{1}{2m}\sum_{i=1}^{m}( \vec{\theta}^T\vec{x}^{(i)}-y^{(i)})^2 J(θ)=2m1i=1∑m(θTx(i)−y(i))2
更新:
θ j : = θ j − α 1 m ∑ i = 1 m ( θ ⃗ T x ⃗ ( i ) − y ( i ) ) x ⃗ j ( i ) \theta_j := \theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}( \vec{\theta}^T\vec{x}^{(i)}-y^{(i)})\vec{x}_j^{(i)} θj:=θj−αm1i=1∑m(θTx(i)−y(i))xj(i)
2. 随机梯度下降法(SGD)
每次更新使用当次输入的数据进行 θ \theta θ的更新。
代价函数则是所有已经测试过的数据误差平方之和。
代价函数:
J ( θ ⃗ ) = 1 2 k ∑ i = 1 k ( θ ⃗ T x ⃗ ( i ) − y ( i ) ) 2 J(\vec{\theta})=\frac{1}{2k}\sum_{i=1}^{k}( \vec{\theta}^T\vec{x}^{(i)}-y^{(i)})^2 J(θ)=2k1i=1∑k(θTx(i)−y(i))2
更新:
θ j : = θ j − α 1 m ( θ ⃗ T x ⃗ k − y ) x ⃗ j k \theta_j := \theta_j-\alpha\frac{1}{m}( \vec{\theta}^T\vec{x}^k-y)\vec{x}^k_j θj:=θj−αm1(θTxk−y)xjk
3. 小批量梯度下降法(MBGD)
每次更新使用当次输入的一组数据进行 θ \theta θ的更新。
代价函数则是所有已经测试过的数据误差平方之和。
代价函数:
J ( θ ⃗ ) = 1 2 t ∑ i = 1 t ( θ ⃗ T p ⃗ ( i ) − q ( i ) ) 2 J(\vec{\theta})=\frac{1}{2t}\sum_{i=1}^{t}( \vec{\theta}^T\vec{p}^{(i)}-q^{(i)})^2 J(θ)=2t1i=1∑t(θTp(i)−q(i))2
更新:
θ j : = θ j − α 1 m ∑ i = 1 k ( θ ⃗ T s ⃗ ( i ) − v ( i ) ) s ⃗ j ( i ) \theta_j := \theta_j-\alpha\frac{1}{m}\sum_{i=1}^{k}( \vec{\theta}^T\vec{s}^{(i)}-v^{(i)})\vec{s}_j^{(i)} θj:=θj−αm1i=1∑k(θTs(i)−v(i))sj(i)
其中:
S = ( s ⃗ ( 1 ) s ⃗ ( 2 ) . . . s ⃗ ( k ) ) = ( x ⃗ ( i 1 ) x ⃗ ( i 2 ) . . . x ⃗ ( i k ) ) , V = ( v ( 1 ) v ( 2 ) . . . v ( k ) ) = ( y ( i 1 ) y ( i 2 ) . . . y ( i k ) ) P = ( p ⃗ ( 1 ) p ⃗ ( 2 ) . . . p ⃗ ( t ) ) = S 1 ⋃ S 2 . . . ⋃ S r , Q = ( q ( 1 ) q ( 2 ) . . . q ( t ) ) = V 1 ⋃ V 2 . . . ⋃ V r 其 中 i 1 , i 2 , . . . , i k ∈ [ 1 , m ] , r 为 更 新 次 数 \begin{aligned} S=\begin{pmatrix}\vec{s}^{(1)} \\ \vec{s}^{(2)} \\ ... \\ \vec{s}^{(k)}\end{pmatrix}=\begin{pmatrix}\vec{x}^{(i_1)} \\ \vec{x}^{(i_2)} \\ ... \\ \vec{x}^{(i_k)}\end{pmatrix} , &V=\begin{pmatrix}v^{(1)} \\ v^{(2)} \\ ... \\ v^{(k)}\end{pmatrix}=\begin{pmatrix}y^{(i_1)} \\ y^{(i_2)} \\ ... \\ y^{(i_k)}\end{pmatrix} \\ P=\begin{pmatrix}\vec{p}^{(1)} \\ \vec{p}^{(2)} \\ ... \\ \vec{p}^{(t)}\end{pmatrix}=S_1\bigcup S_2...\bigcup S_r , &Q=\begin{pmatrix}q^{(1)} \\ q^{(2)} \\ ... \\ q^{(t)}\end{pmatrix}=V_1\bigcup V_2...\bigcup V_r\\ 其中 i_1,i_2,...,i_k\in[1,m],r为更新次数 \end{aligned} S=⎝⎜⎜⎛s(1)s(2)...s(k)⎠⎟⎟⎞=⎝⎜⎜⎛x(i1)x(i2)...x(ik)⎠⎟⎟⎞,P=⎝⎜⎜⎛p(1)p(2)...p(t)⎠⎟⎟⎞=S1⋃S2...⋃Sr,其中i1,i2,...,ik∈[1,m],r为更新次数V=⎝⎜⎜⎛v(1)v(2)...v(k)⎠⎟⎟⎞=⎝⎜⎜⎛y(i1)y(i2)...y(ik)⎠⎟⎟⎞Q=⎝⎜⎜⎛q(1)q(2)...q(t)⎠⎟⎟⎞=V1⋃V2...⋃Vr
即是说, S S S和 V V V是从测试集 X X X和 y y y中抽取出来的 k k k行, P P P和 Q Q Q是所有输入过的测试集的并集。
4. 最优步长推导
下面针对一般形式MBGD做以下推导:
θ j ^ = θ j − α 1 m ∑ i = 1 k ( θ ⃗ T s ⃗ ( i ) − v ( i ) ) s ⃗ j ( i ) = θ j − α m ( s ⃗ ( 1 ) T θ ⃗ − v ( 1 ) s ⃗ ( 2 ) T θ ⃗ − v ( 2 ) . . . s ⃗ ( k ) T θ ⃗ − v ( k ) ) ( s ⃗ j ( 1 ) s ⃗ j ( 2 ) . . . s ⃗ j ( k ) ) = θ j − α m ( s ⃗ ( 1 ) T θ ⃗ − v ( 1 ) s ⃗ ( 2 ) T θ ⃗ − v ( 2 ) . . . s ⃗ ( k ) T θ ⃗ − v ( k ) ) T S j = θ j − α m ( S θ ⃗ − V ) T S j \begin{aligned} \widehat{\theta_j}&= \theta_j-\alpha\frac{1}{m}\sum_{i=1}^{k}( \vec{\theta}^T\vec{s}^{(i)}-v^{(i)})\vec{s}_j^{(i)} \\ &= \theta_j-\frac{\alpha}{m} \begin{pmatrix} {\vec{s}^{(1)}}^T\vec{\theta}-v^{(1)} & {\vec{s}^{(2)}}^T\vec{\theta}-v^{(2)} &...&{\vec{s}^{(k)}}^T\vec{\theta}-v^{(k)} \end{pmatrix} \begin{pmatrix} \vec{s}_j^{(1)} \\ \vec{s}_j^{(2)} \\...\\ \vec{s}_j^{(k)} \end{pmatrix} \\ &= \theta_j-\frac{\alpha}{m} \begin{pmatrix} {\vec{s}^{(1)}}^T\vec{\theta}-v^{(1)} \\ {\vec{s}^{(2)}}^T\vec{\theta}-v^{(2)} \\...\\{\vec{s}^{(k)}}^T\vec{\theta}-v^{(k)} \end{pmatrix}^TS_j\\ &= \theta_j-\frac{\alpha}{m} (S\vec{\theta}-V)^TS_j \end{aligned} θj =θj−αm1i=1∑k(θTs(i)−v(i))sj(i)=θj−mα(s(1)Tθ−v(1)s(2)Tθ−v(2)...s(k)Tθ−v(k))⎝⎜⎜⎜⎛sj(1)sj(2)...sj(k)⎠⎟⎟⎟⎞=θj−mα⎝⎜⎜⎜⎛s(1)Tθ−v(1)s(2)Tθ−v(2)...s(k)Tθ−v(k)⎠⎟⎟⎟⎞TSj=θj−mα(Sθ−V)TSj
有:
( θ 1 ^ θ 2 ^ . . . θ n ^ ) T = ( θ 1 θ 2 . . . θ n ) T − α m ( S θ ⃗ − V ) T ( S 1 S 2 . . . S n ) \begin{pmatrix} \widehat{\theta_1} \\ \widehat{\theta_2} \\ ...\\ \widehat{\theta_n} \\ \end{pmatrix}^T \ = \begin{pmatrix} \theta_1\\ \theta_2\\ ...\\ \theta_n\\ \end{pmatrix}^T -\frac{\alpha}{m}(S\vec{\theta}-V)^T \begin{pmatrix} S_1&S_2&...&S_n \end{pmatrix} ⎝⎜⎜⎛θ1 θ2 ...θn ⎠⎟⎟⎞T =⎝⎜⎜⎛θ1θ2...θn⎠⎟⎟⎞T−mα(Sθ−V)T(S1S2...Sn)
即:
θ ^ ⃗ = θ ⃗ − α m S T ( S θ ⃗ − V ) \vec{\widehat{\theta}}= \vec{\theta}-\frac{\alpha}{m}S^T(S\vec{\theta}-V) θ =θ−mαST(Sθ−V)
带入 J ( θ ) J(\theta) J(θ)得:
J ( θ ^ ⃗ ) = 1 2 t ∑ i = 1 t ( θ ^ ⃗ T p ⃗ ( i ) − q ( i ) ) 2 J(\vec{\widehat{\theta}})=\frac{1}{2t}\sum_{i=1}^{t}( \vec{\widehat{\theta}}^T\vec{p}^{(i)}-q^{(i)})^2 J(θ )=2t1i=1∑t(θ Tp(i)−q(i))2
要找到 α \alpha α使得 J ( θ ^ ⃗ ) J(\vec{\widehat{\theta}}) J(θ )最小。对 J ( θ ^ ⃗ ) J(\vec{\widehat{\theta}}) J(θ )关于 α \alpha α求导:
d J ( θ ^ ⃗ ) d α = − 1 t 2 ∑ i = 1 t ( p ⃗ ( i ) T θ ^ ⃗ − q ( i ) ) p ⃗ ( i ) T S T ( S θ ⃗ − V ) = − 1 t 2 ( P θ ^ ⃗ − Q ) T P S T ( S θ ⃗ − V ) = − 1 t 2 ( P ( θ ⃗ − α m S T ( S θ ⃗ − V ) ) − Q ) T P S T ( S θ ⃗ − V ) \begin{aligned} \frac{d J(\vec{\widehat{\theta}})}{d{\alpha}}&=-\frac{1}{t^2}\sum_{i=1}^{t}( {\vec{p}^{(i)}}^T\vec{\widehat{\theta}}-q^{(i)}){\vec{p}^{(i)}}^TS^T(S\vec{\theta}-V) \\ &=-\frac{1}{t^2}(P\vec{\widehat{\theta}}-Q)^TPS^T(S\vec{\theta}-V)\\ &=-\frac{1}{t^2}(P(\vec{\theta}-\frac{\alpha}{m}S^T(S\vec{\theta}-V))-Q)^TPS^T(S\vec{\theta}-V) \end{aligned} dαdJ(θ )=−t21i=1∑t(p(i)Tθ −q(i))p(i)TST(Sθ−V)=−t21(Pθ −Q)TPST(Sθ−V)=−t21(P(θ−mαST(Sθ−V))−Q)TPST(Sθ−V)
令 U = S T ( S θ ⃗ − V ) U=S^T(S\vec{\theta}-V) U=ST(Sθ−V),则:
d J ( θ ^ ⃗ ) d α = − 1 t 2 ( P ( θ ⃗ − α m U ) − Q ) T P U = − 1 t 2 ( ( P θ ⃗ ) T ( P U ) − α t ( P U ) T ( P U ) − Q T ( P U ) ) \begin{aligned} \frac{d J(\vec{\widehat{\theta}})}{d{\alpha}} &=-\frac{1}{t^2}(P(\vec{\theta}-\frac{\alpha}{m}U)-Q)^TPU\\ &=-\frac{1}{t^2}((P\vec{\theta})^T(PU)-\frac{\alpha}{t}(PU)^T(PU)-Q^T(PU)) \end{aligned} dαdJ(θ )=−t21(P(θ−mαU)−Q)TPU=−t21((Pθ)T(PU)−tα(PU)T(PU)−QT(PU))
再次对 α \alpha α求导,有:
d 2 J ( θ ^ ⃗ ) d α 2 = 1 t 3 ( P U ) T ( P U ) > = 0 \frac{d ^2J(\vec{\widehat{\theta}})}{d{\alpha}^2} =\frac{1}{t^3}(PU)^T(PU)>=0 dα2d2J(θ )=t31(PU)T(PU)>=0
所以当 d J ( θ ^ ⃗ ) d α = 0 \frac{dJ(\vec{\widehat{\theta}})}{d{\alpha}} =0 dαdJ(θ )=0时, J ( θ ^ ⃗ ) J(\vec{\widehat{\theta}}) J(θ )得到最小值,记此时的解为 α ∗ \alpha ^* α∗。
有:
( P θ ⃗ ) T ( P U ) − α ∗ t ( P U ) T ( P U ) − Q T ( P U ) = 0 (P\vec{\theta})^T(PU)-\frac{\alpha ^*}{t}(PU)^T(PU)-Q^T(PU)=0 (Pθ)T(PU)−tα∗(PU)T(PU)−QT(PU)=0
解得:
α ∗ = t ( P U ) T ( P θ ⃗ − Q ) ( P U ) T ( P U ) 其 中 : U = S T ( S θ ⃗ − V ) \begin{aligned} \alpha^*=\frac{t(PU)^T(P\vec{\theta}-Q)}{(PU)^T(PU)} \\ 其中:U=S^T(S\vec{\theta}-V) \end{aligned} α∗=(PU)T(PU)t(PU)T(Pθ−Q)其中:U=ST(Sθ−V)
代入得到梯度下降更新表达式:
θ ⃗ : = θ ⃗ − ( P U ) T ( P θ ⃗ − Q ) ( P U ) T ( P U ) U 其 中 : U = S T ( S θ ⃗ − V ) \vec{{\theta}}:= \vec{\theta}-\frac{(PU)^T(P\vec{\theta}-Q)}{(PU)^T(PU)} U\\ 其中:U=S^T(S\vec{\theta}-V) θ:=θ−(PU)T(PU)(PU)T(Pθ−Q)U其中:U=ST(Sθ−V)
表达式说明,每次迭代我们都可以找到一个最优步长使得梯度下降最快。
当使用BGD时: P = S = X , Q = V = y P=S=X, Q=V=y P=S=X,Q=V=y。
经测试使用 α = 0.001 \alpha = 0.001 α=0.001时,迭代500次没有达到阈值范围内,使用最优步长只需6次就能达到阈值。
从表达式可以看出计算最优步长时计算量大,使用固定步长仍是一个好用的算法。
返回目录