吴恩达深度学习笔记(一)week1~week2

本文档详细解析了吴恩达课程中关于反向传播算法的推导过程,重点介绍了梯度下降法及其向量化实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吴恩达深度学习笔记(一)


笔记前言:距离开学过去也有两个半月了,浮躁期也渐渐过去,两个半月糊里糊涂的接触了些机器学习/深度学习的知识,看了不少资料,回来过头来看还是觉得看吴恩达老师的课受益最深,深入浅出,在此也强烈推荐每一个想进入机器学习领域又苦于无从入手的同学以该视频课程作为入门。上周做了组内的第一次汇报便是讲神经网络,准备过程中发现之前自认为弄懂的知识点甚是模糊,然后又想想这几个月的学习,大都变得混乱与模糊,故准备以写博客的方式帮助自己理清知识点。距看完第一门课已经将近两个月,故此笔记并不包含课程中的每个细节,只把重要的知识点罗列出来,并加上自己的理解。


关于笔记内容

本笔记主要是关于反向传播算法(BP)的推导,至于视频中有关数学内容并未列出。关于反向传播算法主要包含两个关键词:梯度下降链式求导,课程中吴恩达老师由浅入深,从单神经元单样本的梯度下降讲起(课程2.9),接着是单神经元多样本的梯度下降(课程2.10),然后引入向量作为优化计算的工具并介绍了其python实现(2.11-2.17);接着第三周介绍了浅层神经网络—一个单隐层的的神经网络,推导了单隐层神经网络的梯度下降,值得一提的是由于引入了向量化表示,这块学习时曾遇到过困难,主要是对矩阵求导不熟悉;第四周介绍了多隐层神经网络(深层神经网络)。本篇博文的内容为课程前两周的内容—只涉及感知机的推导,即只有输入层和输出层


单神经元单样本的梯度下降

这里写图片描述
注:不管是哪种形式的梯度下降的计算,首先必须把前向传播过程的计算写下来,才可以进行后面的反向传播下降计算。 这里我们假设输入样本的特征维度为2。再次强调本篇博文的推导都是针对如上图所示的模型推导,其神经元模型如下图。 这里的θ=0θ=0ff为sigmoid函数(虽然模型简单,但是弄懂了这部分推导,后面的多层神经网络自然水到渠成)
这里写图片描述
前向传播:

z=ω1x1+ω2x2+by^=a=σ(z)L(a,y)=(ylog(a)+(1y)log(1a))

反向传播:

da=La=ya+1y1adz=Lz=Laaz=(ya+1y1a)a(1a)=aydw1=Lw1=Lzzw1=x1dz=x1(ay)dw2=Lw2=Lzzw2=x2dz=x2(ay)db=Lb=Lzzb=1dz=ayda=∂L∂a=−ya+1−y1−adz=∂L∂z=∂L∂a⋅∂a∂z=(−ya+1−y1−a)⋅a(1−a)=a−ydw1=∂L∂w1=∂L∂z⋅∂z∂w1=x1⋅dz=x1(a−y)dw2=∂L∂w2=∂L∂z⋅∂z∂w2=x2⋅dz=x2(a−y)db=∂L∂b=∂L∂z⋅∂z∂b=1⋅dz=a−y

参数更新:
w1:=w1αdw1w2:=w2αdw2b:=bαdbw1:=w1−αdw1w2:=w2−αdw2b:=b−αdb

单神经元多样本的梯度下降

这里我们继续假设输入样本的特征维度为2,关于多样本的误差函数定义为每个样本产生的误差求和取均值即:
J(w,b)=1mmi=1L(y^(i),y(i))(1.1)J(w,b)=1m∑i=1mL(y^(i),y(i))−−−−−−−−−−(1.1)
参数更新公式:

dw1=J(w,b)=1mi=1mLw1L(y^(i),y(i))(1.2)dw2=J(w,b)=1mi=1mLw2L(y^(i),y(i))(1.3)db=J(w,b)=1mi=1mLbL(y^(i),y(i))(1.4)dw1=J(w,b)=1m∑i=1m∂L∂w1L(y^(i),y(i))−−−−−(1.2)dw2=J(w,b)=1m∑i=1m∂L∂w2L(y^(i),y(i))−−−−−(1.3)db=J(w,b)=1m∑i=1m∂L∂bL(y^(i),y(i))−−−−−−−(1.4)

直观理解参数更新公式,对w,bw,b的求导其实分为了m步进行,每一步互相独立,求导步骤同单神经元单样本的求导
前向传播:
z(i)=wTx(i)+by^(i)=a(i)=σ(z(i))J(w,b)=1mi=1mL(y^(i),y(i))z(i)=wTx(i)+by^(i)=a(i)=σ(z(i))J(w,b)=1m∑i=1mL(y^(i),y(i))

反向传播:课程中给出的伪代码如下
这里写图片描述
注:对于误差函数JJ的求和可以放在for循环内第二步的任何位置,因为对dz,dw,db的求导与JJ无关,最后得到的参数更新公式为
dw1=1mi=1mx1(i)(a(i)y(i))1.5dw2=1mi=1mx2(i)(a(i)y(i))1.6db=1mi=1m(a(i)y(i))1.7

向量化梯度下降

涉及到向量(矩阵)时,必须弄清楚每个每个矩阵的维度,弄清楚这个后便对矩阵内部的运算有更清晰的理解,首先我们以一个简单的例子来说明引入向量的作用,以上面求得的(1.5)-(1.7)式为例,我们可以令X=[x(1)1,x(2)1,x(m)1]X=[x1(1),x1(2),⋯x1(m)],令dZ=[a(1)y(1),a(2)y(2),a(m)y(m)]dZ=[a(1)−y(1),a(2)−y(2),⋯a(m)−y(m)],则用python我们可以做一步运算dw1=1mnp.dot(X,dZT)dw1=1mnp.dot(X,dZT)即得到dw1dw1,利用二维矩阵X=X=

(x(1)1x(1)2x(2)1x(2)2x(m)1x(m)2)(1)(1)(x1(1)x1(2)⋯x1(m)x2(1)x2(2)⋯x2(m))

利用python做dW=1mnp.dot(X,dZT)dW=1mnp.dot(X,dZT)便可以同时得到dW=[dw1dw2]TdW=[dw1dw2]Tdb=np.sum(dZ)db=np.sum(dZ),现对参数向量化来重新推导上面的传播过程:
输入矩阵XXnx,m
权重矩阵WW:nx,1
偏置bb:为一个常数
输出矩阵Y:1,m(1,m)
正向传播:
Z=wTX+bshape=(1,m)A=δ(Z)shape=(1,m)Z=wTX+b−−−−−shape=(1,m)A=δ(Z)−−−−−shape=(1,m)

python代码实现
Z = np.dot(w.T,X) + b
A = sigmoid(Z)  

反向传播:

dZ=AYshape=(1,m)db=1mi=1mdz(i)dw=1mXdZTshape=(nx,1)dZ=A−Y−−−−−shape=(1,m)db=1m∑i=1mdz(i)−−−−−−−−常数dw=1mX⋅dZT−−−shape=(nx,1)列向量

python代码实现
db = 1/m*np.sum(dZ)
dw = 1/m*np.dot(X,dZ.T)

python简介

课程中主要介绍了python的广播机制以及关于一维向量初始化时的易错点

广播机制

import numpy as np
A=np.array([[1,2,3],
            [4,5,6],
            [7,8,9]])
print(A) 

输出
这里写图片描述
按列求和

print(A.sum(axis=0))

这里写图片描述
矩阵元素全部加1

print(A+1)

输出
这里写图片描述
对于其他的运算有类似的广播机制

一维向量初始化易错点

例如初始化一个含有五个高斯随机变量时,必须以如下形式初始化

a=np.random.rand(1,5)
b=np.random.rand(5,1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值