04. logistic回归-反向传播

  • logistic回归
  • 反向传播

反向传播

这应该是神经网络里面最难的部分了吧~~为此除了CS231n的课,还结合了Coursera上Ng的deeplearning课程

logistic 回归

想直接看反向传播的视频的,但发现Ng的符号使用不太一样,所以先从头看点~顺便重新理解了一下logistic回归,貌似又有了新的感觉~就记录下来吧

1. 符号表示:

input: x.shape=Rnx x . s h a p e = R n x 样本特征是以列的形式放置的

m training example {(x(1),y(1)),(x(2),y(2)),..,(x(n),y(n))} { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . , ( x ( n ) , y ( n ) ) }

XRnxm X ∈ R n x ∗ m ,so X.shape=(nx,m) X . s h a p e = ( n x , m )

label: y{0,1} y ∈ { 0 , 1 } ,so y.shape=(1,m) y . s h a p e = ( 1 , m )

2. forward

我们需要将计算得到的输出与真实标签y进行对比,即 ŷ =P(y=1|x) y ^ = P ( y = 1 | x )

parameters: WRnx1,bR W ∈ R n x ∗ 1 , b ∈ R

output:

z=wT.dot(x)+b z = w T . d o t ( x ) + b

ŷ =sigmoid(wT.dot(x)+b) y ^ = s i g m o i d ( w T . d o t ( x ) + b ) ŷ 01 y ^ 转 化 到 0 到 1 之 间 的 概 率

sigmoid(z)=11+ez s i g m o i d ( z ) = 1 1 + e − z

04. logistic回归-反向传播_第1张图片

3. cost function: 不是采用的均方差,因为得到的函数不是Convex的,至于为什么有机会看看。。总之最后是下面这样:

L(ŷ ,y)=ylog(ŷ )(1y)log(1ŷ ) L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ )

后面学过softmax就会发现这其实就是二分类的softmax啊~~而softmax就是多分类的logistic回归~

对单个样本来说:对应起来就是 ŷ =efyijefj y ^ = e f y i ∑ j e f j ,losistic的概率只有一个,而softmax的概率有j=class个~
至此,也发现,回归相对于分类来说就是回归能给出每一类的概率,而分类只选最好的那个。

除了可以从softmax角度来理解这个损失函数,还可以从对数似然估计来推导~~以前推过,这儿就不写了

4. 梯度下降

w=wdw=wJ(w,b)w w = w − d w = w − ∂ J ( w , b ) ∂ w , 其中loss对权重w的梯度怎么求?这就是反向传播的重难点~~

https://img-blog.csdn.net/20180202133635926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGFueGlhb3hpZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast” width=500 height=500 />

对单个样本的求导就是链式法则~与以前学过的求导是一样的~

"da"=La=ya+1y1a " d a "= ∂ L ∂ a = − y a + 1 − y 1 − a

dz=dLdz=dLdadadz=ay d z = d L d z = d L d a d a d z = a − y

dw1=dLdzdzdw1=x1dz=x1(ay) d w 1 = d L d z d z d w 1 = x 1 d z = x 1 ( a − y )

db=dLdzdzdb=dz d b = d L d z d z d b = d z

04. logistic回归-反向传播_第2张图片

dw1=1mmi=1xi(aiyi) d w 1 = 1 m ∑ i = 1 m x i ( a i − y i )

db=1mmi=1dzi=1mmi=1(aiyi) d b = 1 m ∑ i = 1 m d z i = 1 m ∑ i = 1 m ( a i − y i )

然后将单个样本的推广到m个样本,公式Ng写的很清楚了~~~不得不说Ng太适合教学了,由浅入深,通俗易懂,是个人都听的懂啊!!

再回到问题中来,dw在计算时用的累加器,因为权重参数W是共享的,也就是每个样本都是在同样的一组权重下求得的loss,因此每个样本都会有对应的dw,累加之后求平均值 dw1 d w 1 ,就是整个数据集经过一次梯度下降 w1 w 1 的变化量。

但这样求梯度,需要连个循环,一个是样本m的循环,一个是特征的循环(这里 XRnxm,WRnx1 X ∈ R n x ∗ m , W ∈ R n x ∗ 1 ,总共有 nx n x 个特征),这样两重循环非常耗费计算资源。所以需要引入向量化的计算。

然后就是矩阵运算,有些地方表示很难理解。。。这也是看Ng视频跟着推导一遍的主要目的!

5. 向量化

forward:

线性输出: Z=WTX+b Z = W T X + b

非线性化后: A=sigmoid(Z) A = s i g m o i d ( Z )

backward:

dZ=AY d Z = A − Y

dw=1mXdZT d w = 1 m X d Z T

db=1mnp.sum(dZ) d b = 1 m n p . s u m ( d Z )

04. logistic回归-反向传播_第3张图片

6. 来自Ng建议

donnot use “rank 1 array”

尽量使用reshape() 和 assert()

import numpy as np 

a = np.random.rand(5)
print(a)
[ 0.22320117  0.59663676  0.16794532  0.56259808  0.1825964 ]
print(a.T)
[ 0.22320117  0.59663676  0.16794532  0.56259808  0.1825964 ]
print(a.dot(a.T))
0.783857867461
b = np.random.rand(1,5)
print(b)
print(a-b)
[[ 0.19164006  0.64546438  0.78617663  0.96930788  0.99644683]]
[[ 0.03156112 -0.04882762 -0.61823131 -0.40670979 -0.81385043]]

So, rank 1 array is a strange thing~

反向传播

重新推导了一遍logistic的梯度之后,我们再来看看神经网络中的反向传播~

你可能感兴趣的:(cs231n)