Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

理论部分

在cousera这个课中(需要科学上网),吴恩达通过Logistic Regression来介绍神经网络的前向传播和反向传播过程,感觉比较形象,适合深度学习入门。并且这个课不用付费也可以免费观看所有课程和做作业,只不过部分作业不能提交,更多详情查看cousera

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案
已知现在有参数x1,w1,x2,w2,bx_1, w_1, x_2, w_2, b,通过计算图的方式,以此前向地初始化所有计算公式,比如已知初始参数可以得到z,然后a可以通过σ(z)\sigma(z)得到,其中σ(z)=1/(1+ez)\sigma(z) = 1/(1+e^{-z})求得a之后可以获得Loss function L(a,y)==(yloga+(1y)log(1a))L(a,y)==-(y \log a +(1-y)\log(1-a))

当正向完成之后,可以反向传播修改梯度,使其最优化。

依次计算L(a,y)L(a,y)关于每一级(层)的参数的求导,求导公式不在此推导.
比如:da=dLdb=ya+1y1ada=\frac{dL}{db}=-\frac{y}{a}+\frac{1-y}{1-a}
dz=dLdz=dadzdLda=aydz=\frac{dL}{dz}=\frac{da}{dz} \frac{dL}{da}=a-y
同理可以求得dwi=xidzdw_i=x_idz
db=dzdb=dz

因此,可以梯度下降地更新参数:

wαdww-\alpha dw

bαdbb-\alpha db

其中这个α\alpha是学习率learning_rate。

当更新一次参数后,即完成了一次包含前向传播和后向传播的神经网络,虽然他很简单。

另外,这只是针对一个L(a,y)的。对于所有的训练集m,需要求平均.

于是对于所有的m个训练集:

总代价函数J(w,b)J(w,b)等于每个代价函数L(a,y)L(a,y)之和的平均:
J(w,b)=1mΣi=1mL(a(i),y(i))J(w,b) = \frac{1}{m} \Sigma_{i=1}^{m} L(a^{(i)}, y^{(i)})
dw=1mXdzTdw=\frac{1}{m}Xdz^T
db=1mΣi=1mdz(i)db=\frac{1}{m}\Sigma_{i=1}^mdz^{(i)}

作业部分

第一个作业

第一次编程作业出现在第二周(第一周是选择题),一共两个,第一个名叫Python Basics With Numpy 主要是用来熟悉基本函数。

np.exp()生成sigmoid函数σ(x)\sigma(x)

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

第二个还是sigmoid

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

然后是sigmoid gradient,根据提示公式很容易写出来

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

然后是reshape

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

normalize

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

然后是softmax函数,其实现公式是softmaxx)=exΣexsoftmax(x)=\frac{e^x}{\Sigma e^x }

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

实现一个loss function

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

另一个Loss function

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案然后就可以全对了, 这个作业可以提交,下一个就要收费才能提交
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

第二个作业

第二个叫Logistic regression with a Neural Network Mindset 大意就是用神经网络思维来实现逻辑回归, 这个稍微复杂一点,但理解了课上将的那几个公式,直接套用就行首先导入包
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

获取一个训练集的参数

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

查看flatten之后的结果

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案这里有个技巧,想要flatten一个matrix就直接reshape(shape[0],-1).T 或者reshape(bcd, a)(如果他的shape是abcd的话)

重点,实现逻辑回归学习算法

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

1.实现sigmoid:

这里跟之前第一个python练习相同
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

初始化参数

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

前向和反向传播

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

通过获得参数预测结果

Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案

混合所有函数实现model

用之前所有的函数,来进行初始化,优化,预测,计算得分
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案后面还有一些已经写好的函数,可以用来查看性能,比如学习率曲线
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案不同学习率比较
Cousera笔记(1):通过逻辑回归认识神经网络,含吴恩达deep learning第一次编程作业及答案这个作业就不能提交了,需要充值(cousera:打钱!)

总的来说,把这个课和作业做了基本概念都能懂,比网上那些动不动几百的入门课强太多。