深度学习与神经网络学习笔记(三)

本文详细介绍了Logistic回归中的梯度下降算法原理及其实现过程,包括损失函数的求导、参数更新等关键步骤,并对比了向量化求解的优势。

四、logistic 回归中的梯度下降

这里写图片描述

  我们一般可以通过图中的方式来进行损失函数的求解,而损失函数是怎么反向影响(ω,b)的值的变化的呢?这就要用到导数的知识了,首先我们把损失函数对a求导:

d(a)=dL(a,y)d(a)=ya+1y1a

  然后再对z求导:

d(z)=dL(a,y)d(z)=dL(a,y)d(a)d(a)d(z)=ay

  最后我们分别对各个参数求导就可以得到:

d(ω1)=Lω1=x1d(z)
d(ω2)=Lω2=x2d(z)
d(b)=Lb=d(z)

  由此可知,这样一个样本的一次梯度更新的步骤就是这样,更新函数为:

ω1:=ω1αd(ω1)ω2:=ω2αd(ω2)b:=bαd(b)
  现在我们如果把样本扩展到m个的话,那么对应的各个函数就会变为:

J(ω,b)=1mmi=1L(a(i),y(i))

a(i)=y^(i)=σ(z(i))=σ(ωTx(i)+b)

J(ω,b)ωi=1mmi=1L(a(i),y(i))ωi

  接下来,我们将会通过实例的代码来做出这一系列的运算,首先我们把我们要写的代码的顺序理一下:

J=0  d(ω1)=0  d(ω2)=0  d(b)=0
fori=1tom:

  z(i)=ωTx(i)+b    (1)

  a(i)=σ(z(i))    (2)

  J+=[y(i)loga(i)+(1y(i))log(1a(i))]    (3)

  d(z(i))=a(i)y(i)    (4)

  d(ω1)+=x(i)1d(z(i))    (5)

  d(ω2)+=x(i)2d(z(i))    (6)

  d(b)+=d(z(i))    (7)

  J/=md(ω1)/=md(ω2)/=md(b)/=m

  更新函数同上面的更新函数,这里我们只有三个参数,但是实际上是有非常多的参数的,在实际中我们肯定要对(4)-(7)式进行循环求解的,循环次数取决于参数个数,因为这里只有三个,所以我们就分别罗列出来了。实际的编写中我们多采用向量化来统一存储参数值和样本值,下一节将会讲解。

五、向量化求解

  其实向量化求解就是减少循环的一种方式,这样减少循环不仅能够节省时间,还会得到一模一样的值出来,并且这样的方式能够缩短到循环的1/50的时间,这个就是python的numpy库,相信向量都知道是怎么回事,这个库的具体使用可以参照网上的使用手册。这里我就写出向量化之后代码的实现过程:
ωb0;X,Y

z=ωTX+b=np.dot(ω.T,x)+b

A=σ(z)

dz=AY

dw=1mXdzT

db=1mnp.sum(dz)

ω:=ωαdw

b:=bαdb

这就是一次迭代的过程,但是如果要进行多次迭代的话,我们还是要运用循环的方式,这是不可避免的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值