【深度学习】吴恩达课程笔记(一)Logistic回归和深度学习基础知识整理

【深度学习】吴恩达课程笔记(一)Logistic回归和深度学习基础知识整理

寒假的时候跟着李宏毅的视频学了很久,但是我都是记在笔记本上的,现在有些遗忘了,发现博客是个很好的记忆载体,那就快速过一遍吴恩达的吧。顺便还把Latex学了,真不错😀

函数积累

ReLU函数修正线性单元
修正:不小于0!
Alt
sigmoid函数
在这里插入图片描述
σ ( z ) = 1 1 + e − z . \sigma(z) = \frac{1}{1+e^{-z}}. σ(z)=1+ez1.
表示概率不错的。

基本概念

基本神经元
在这里插入图片描述
x x x 是特征,神经元代表函数, y y y输出
结构化数据:类似结构体这样,挺好理解。
非结构化数据:图像,声音等。
RGB三通道在这里插入图片描述
如果输入图片是64×64像素,就有三个64×64矩阵。
符号介绍:

项目Value
n x n_{x} nx特征向量维数
m t r a i n m_{train} mtrain训练样本数
m t e s t m_{test} mtest测试样本数
( x 1 , y 1 ) ⋅ ⋅ ⋅ ( x i , y i ) ⋅ ⋅ ⋅ ( x m , y m ) (x^{1},y^{1})···(x^{i},y^{i})···(x^{m},y^{m}) (x1,y1)(xi,yi)(xm,ym) i i i个样本
X X X s h a p e = n × m shape=n×m shape=n×m训练集
Y Y Y s h a p e = 1 × m shape=1×m shape=1×m输出集
L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat y,y)=\frac{1}{2}(\hat y-y)^2 L(y^,y)=21(y^y)2最平常的Loss函数,非凹不用

X = [ x ( 1 ) ⋅ ⋅ ⋅ x ( m ) ] X= \begin{gathered} \begin{bmatrix} x^{(1)} & ···&x^{(m)} \end{bmatrix} \end{gathered} X=[x(1)x(m)]

梯度下降(Gradient Descent)

找到使 J ( w , b ) J(w,b) J(w,b)最小的 w , b w,b w,b
假设只看 w w w
在这里插入图片描述
更新 w , b w,b w,b
w = w − α ∂ J ( w , b ) ∂ w w=w-\alpha\frac{\partial J(w,b)}{\partial w} w=wαwJ(w,b)
b = b − α ∂ J ( w , b ) ∂ b b=b-\alpha\frac{\partial J(w,b)}{\partial b} b=bαbJ(w,b)
α \alpha α是学习率(learning rate)

Logistic回归

二分类,判断一个图片是不是个猫,把图片的RGB三个矩阵提出了放进一个特征向量 x x x里,是重起来的红色全部一列,之后绿色接着一列。像素64×64, x x x的维度是64×64×3.
建立模型啦:
w ∈ R n x , b ∈ R w\in R^{n_{x}} , b\in R wRnx,bR
y ^ = σ ( w x + b ) \hat{y}=\sigma(w^x+b) y^=σ(wx+b)
因为基本损失函数在logistic上是非凹的,所以采用下面这种写法:
交叉熵损失函数:log底数是e 交叉熵
L ( y ^ , y ) = − ( y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ) L(\hat y,y)=-(y\log{\hat y}+(1-y)\log(1-\hat y) ) L(y^,y)=(ylogy^+(1y)log(1y^))
损失函数只用于单个训练样本引入成本函数(cost function),用于衡量参数 w w w b b b
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)},y^{(i)}) J(w,b)=m1i=1mL(y^(i),y(i))
在这里插入图片描述
然后我们来模拟一下梯度下降的伪代码,理解就行了,这段伪代码的意思就是梯度下降求得J,还有dw1,也就是 ∂ J ( w , b ) ∂ w 1 \frac{\partial J(w,b)}{\partial w_{1}} w1J(w,b)
∂ J ∂ z = ∂ J ∂ a × ∂ a ∂ z = a − y \frac{\partial J}{\partial z}=\frac{\partial J}{\partial a}×\frac{\partial a}{\partial z}=a-y zJ=aJ×za=ay
∂ J ∂ w 1 = ∂ J ∂ z × ∂ z ∂ w 1 = ( a − y ) × x 1 \frac{\partial J}{\partial w_1}=\frac{\partial J}{\partial z}×\frac{\partial z}{\partial w_1}=(a-y)×x_1 w1J=zJ×w1z=(ay)×x1

J=0 
dw1=0 #设置两个特征,n=0
dw2=0
db=0
i=1
for  i in range(m):
	Z=WX+b   #W是一个2维向量,X是特征向量
	a=sigmoid(Z)  #每个样本算出的概率
	J+=L(y^,a)    #把J加起来
	dz=a-y		  #
	dw1+=x1dz	#这里学习率是1,x1dz就是Z对w求导
	dw2+=x2dz
	db+=dz
J/=m	#这段伪代码的意思就是梯度下降求得J
dw1/=m
dw2/=m
db/=m

但是这样的实现很慢,因为我们不止两个特征向量,这就需要for循环嵌套,数据庞大的情况下效率很低,这个时候就引入了Python的numpy。

向量化

Z=np.dot(w,x)+b

这段代码意思是:
Z = w T × x + b Z=w^T×x +b Z=wT×x+b
然后举了好多numpy里面的例子,就不一一赘述了。
[ z ( 1 ) ⋅ ⋅ ⋅ z ( m ) ] = w T X + [ b ( 1 ) ⋅ ⋅ ⋅ b ( m ) ] \begin{gathered} \begin{bmatrix} z^{(1)} & ···&z^{(m)} \end{bmatrix} \end{gathered}=w^TX+ \begin{gathered} \begin{bmatrix} b^{(1)} & ···&b^{(m)} \end{bmatrix} \end{gathered} [z(1)z(m)]=wTX+[b(1)b(m)]
A = [ a ( 1 ) ⋅ ⋅ ⋅ a ( m ) ] = σ Z A=\begin{gathered} \begin{bmatrix} a^{(1)} & ···&a^{(m)} \end{bmatrix} \end{gathered}=\sigma Z A=[a(1)a(m)]=σZ
好啦,经过numpy的引入我们简单了许多,重新写一下代码:

for i in range(1000)  #1000次梯度下降
	Z=np.dot(w,x)+b  #函数
	A=sigmoid(Z)     #函数得到概率——结果
	dZ=A-Y			#用来求梯度方向一环
	dw=(1/m)*np.dot(X,Z.T)	#梯度方向
	db=(1/m)*np.sum(dZ)		#梯度方向
	w=w-r*dw				#更新梯度
	b=b-r*db				#更新梯度

Python广播

  1. 加常数,矩阵里所有数都加
  2. m×n与m×1或者1×n时,瞬间扩展。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值