2.5 梯度下降的例子(Gradient Descent on m Examples)

m个样本的Cost function表达式如下:

z(i)=wTx(i)+bz^{(i)}=w^Tx^{(i)}+b
y^(i)=a(i)=σ(z(i))\hat y^{(i)}=a^{(i)}=\sigma(z^{(i)})
J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)log y^(i)+(1y(i))log (1y^(i))]J(w,b)=\frac1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})=-\frac1m\sum_{i=1}^m[y^{(i)}log\ \hat y^{(i)}+(1-y^{(i)})log\ (1-\hat y^{(i)})]

Cost function关于w和b的偏导数可以写成和平均的形式:

dw1=1mi=1mx1(i)(a(i)y(i))dw_1=\frac1m\sum_{i=1}^mx_1^{(i)}(a^{(i)}-y^{(i)})
dw2=1mi=1mx2(i)(a(i)y(i))dw_2=\frac1m\sum_{i=1}^mx_2^{(i)}(a^{(i)}-y^{(i)})
dwm=1mi=1mxm(i)(a(i)y(i))dw_m=\frac1m\sum_{i=1}^mx_m^{(i)}(a^{(i)}-y^{(i)})
db=1mi=1m(a(i)y(i))db=\frac1m\sum_{i=1}^m(a^{(i)}-y^{(i)})

算法流程如下所示:

J=0; dw1=0; dw2=0; db=0;
for i = 1 to m
    z(i) = wx(i)+b;
    a(i) = sigmoid(z(i));
    J += -[y(i)log(a(i))+(1-y(i)log(1-a(i));
    dz(i) = a(i)-y(i);
    dw1 += x1(i)dz(i);
    dw2 += x2(i)dz(i);
    db += dz(i);
J /= m;
dw1 /= m;
dw2 /= m;
db /= m;

经过每次迭代后,根据梯度下降算法,w和b都进行更新:

w1:=w1α dw1w_1:=w_1-\alpha\ dw_1
w2:=w2α dw2w_2:=w_2-\alpha\ dw_2
wm:=wmα dwmw_m:=w_m-\alpha\ dw_m
b:=bα dbb:=b-\alpha\ db

在深度学习中,样本数量m通常很大,使用for循环会让神经网络程序运行得很慢。应该尽量避免使用for循环操作,而使用矩阵运算,能够大大提高程序运行速度

Last updated