理论部分
在cousera这个课中(需要科学上网),吴恩达通过Logistic Regression来介绍神经网络的前向传播和反向传播过程,感觉比较形象,适合深度学习入门。并且这个课不用付费也可以免费观看所有课程和做作业,只不过部分作业不能提交,更多详情查看cousera
已知现在有参数
x
1
,
w
1
,
x
2
,
w
2
,
b
x_1, w_1, x_2, w_2, b
x1,w1,x2,w2,b,通过计算图的方式,以此前向地初始化所有计算公式,比如已知初始参数可以得到z,然后a可以通过
σ
(
z
)
\sigma(z)
σ(z)得到,其中
σ
(
z
)
=
1
/
(
1
+
e
−
z
)
\sigma(z) = 1/(1+e^{-z})
σ(z)=1/(1+e−z)求得a之后可以获得Loss function
L
(
a
,
y
)
=
=
−
(
y
log
a
+
(
1
−
y
)
log
(
1
−
a
)
)
L(a,y)==-(y \log a +(1-y)\log(1-a))
L(a,y)==−(yloga+(1−y)log(1−a))
当正向完成之后,可以反向传播修改梯度,使其最优化。
依次计算
L
(
a
,
y
)
L(a,y)
L(a,y)关于每一级(层)的参数的求导,求导公式不在此推导.
比如:
d
a
=
d
L
d
b
=
−
y
a
+
1
−
y
1
−
a
da=\frac{dL}{db}=-\frac{y}{a}+\frac{1-y}{1-a}
da=dbdL=−ay+1−a1−y
d
z
=
d
L
d
z
=
d
a
d
z
d
L
d
a
=
a
−
y
dz=\frac{dL}{dz}=\frac{da}{dz} \frac{dL}{da}=a-y
dz=dzdL=dzdadadL=a−y
同理可以求得
d
w
i
=
x
i
d
z
dw_i=x_idz
dwi=xidz
d
b
=
d
z
db=dz
db=dz
因此,可以梯度下降地更新参数:
w − α d w w-\alpha dw w−αdw
b − α d b b-\alpha db b−αdb
其中这个 α \alpha α是学习率learning_rate。
当更新一次参数后,即完成了一次包含前向传播和后向传播的神经网络,虽然他很简单。
另外,这只是针对一个L(a,y)的。对于所有的训练集m,需要求平均.
于是对于所有的m个训练集:
总代价函数
J
(
w
,
b
)
J(w,b)
J(w,b)等于每个代价函数
L
(
a
,
y
)
L(a,y)
L(a,y)之和的平均:
J
(
w
,
b
)
=
1
m
Σ
i
=
1
m
L
(
a
(
i
)
,
y
(
i
)
)
J(w,b) = \frac{1}{m} \Sigma_{i=1}^{m} L(a^{(i)}, y^{(i)})
J(w,b)=m1Σi=1mL(a(i),y(i))
d
w
=
1
m
X
d
z
T
dw=\frac{1}{m}Xdz^T
dw=m1XdzT
d
b
=
1
m
Σ
i
=
1
m
d
z
(
i
)
db=\frac{1}{m}\Sigma_{i=1}^mdz^{(i)}
db=m1Σi=1mdz(i)
作业部分
第一个作业
第一次编程作业出现在第二周(第一周是选择题),一共两个,第一个名叫Python Basics With Numpy 主要是用来熟悉基本函数。
np.exp()生成sigmoid函数 σ ( x ) \sigma(x) σ(x)
第二个还是sigmoid
然后是sigmoid gradient,根据提示公式很容易写出来
然后是reshape
normalize
然后是softmax函数,其实现公式是 s o f t m a x ( x ) = e x Σ e x softmax(x)=\frac{e^x}{\Sigma e^x } softmax(x)=Σexex
实现一个loss function
另一个Loss function
然后就可以全对了, 这个作业可以提交,下一个就要收费才能提交
第二个作业
第二个叫Logistic regression with a Neural Network Mindset 大意就是用神经网络思维来实现逻辑回归, 这个稍微复杂一点,但理解了课上将的那几个公式,直接套用就行首先导入包
获取一个训练集的参数
查看flatten之后的结果
这里有个技巧,想要flatten一个matrix就直接reshape(shape[0],-1).T 或者reshape(bcd, a)(如果他的shape是abcd的话)
重点,实现逻辑回归学习算法
1.实现sigmoid:
这里跟之前第一个python练习相同
初始化参数
前向和反向传播
通过获得参数预测结果
混合所有函数实现model
用之前所有的函数,来进行初始化,优化,预测,计算得分
后面还有一些已经写好的函数,可以用来查看性能,比如学习率曲线
不同学习率比较
这个作业就不能提交了,需要充值(cousera:打钱!)
总的来说,把这个课和作业做了基本概念都能懂,比网上那些动不动几百的入门课强太多。