Deep Learning Notes - 1.2深度学习基础

Deep Learning Notes - 1.2深度学习基础

二进制分类 Binary Classification

例如:判断图片中是否含有猫

图片为rbg模式,大小为 width×height w i d t h × h e i g h t ,使用矩阵(列向量)存储如下:

x=Mat_R1,1Mat_R1,2...Mat_G1,1Mat_G1,2...Mat_B1,1Mat_B1,2...nx×1 x = [ M a t _ R 1 , 1 M a t _ R 1 , 2 . . . M a t _ G 1 , 1 M a t _ G 1 , 2 . . . M a t _ B 1 , 1 M a t _ B 1 , 2 . . . ] n x × 1

其中 nx=3×width×height n x = 3 × w i d t h × h e i g h t ,并将 x x 作为输入。

输出:

y={0  1  

任意一个实例可以表示为 (x,y) ( x , y ) xRnx x ∈ R n x y{0,1} y ∈ { 0 , 1 } ,矩阵化之后为:

这里写图片描述

Logistic 回归

给定 x x 的前提下,令y^=P(y=1|x)y^(0,1)

输出: y^=σ(wTx+b) y ^ = σ ( w T x + b ) xRnx x ∈ R n x wRnx w ∈ R n x bR b ∈ R

其中 σ(z)=11+ez σ ( z ) = 1 1 + e − z ,图像如下:

这里写图片描述

Loss 函数:

L(y^,y)=[ylogy^+(1y)log(1y^)] L ( y ^ , y ) = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ]

Cost 函数:

J(w,b)=1mi=1mL(y^(i),y(i))=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(i))] J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ y ^ ( i ) + ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) ]

其中的 log log 均以 e e 为底。

梯度下降 Gradient Descent

计算(w,b)来使得 J(w,b) J ( w , b ) 数值最小,以下是一次梯度下降公式:

w=wαJ(w,b)w w = w − α ∂ J ( w , b ) ∂ w

b=bαJ(w,b)b b = b − α ∂ J ( w , b ) ∂ b

其中, α α 为学习率。

此后,不再详细区分 d d 符号。

计算图

例如:

J(a,b,c)=3(a+bc) J ( a , b , c ) = 3 ( a + b c )

正向计算数值和反向计算导数的过程如下:

这里写图片描述

Logistic回归的梯度下降

z=wTx+b z = w T x + b

y^=a=σ(z) y ^ = a = σ ( z )

L(a,y)=[yloga+(1y)log(1a)] L ( a , y ) = − [ y log ⁡ a + ( 1 − y ) log ⁡ ( 1 − a ) ]

这里写图片描述

用于 m m 个样例,并高度向量化:

这里写图片描述

Python伪代码为:

# 高度向量化的目的是
# 减少for循环
# 以加快代码的运行速度
import numpy as np

for i in range(1000):   # 梯度下降1000次
    # 计算 a (y hat)
    Z = np.dot(W.T, X) + b
    A = sigmod(Z)


    dz = A - Y
    dw = 1/m * np.dot(X, dz.T)
    db = 1/m * np.sum(dz)

    w -= alpha * dw
    b -= alpha * db

Python Broadcasting

[123]+10=[123]+[101010]

[142536]+[102030]=[142536]+[101020203030] [ 1 2 3 4 5 6 ] + [ 10 20 30 ] = [ 1 2 3 4 5 6 ] + [ 10 20 30 10 20 30 ]

[142536]+[1020]=[142536]+101010202020 [ 1 2 3 4 5 6 ] + [ 10 20 ] = [ 1 2 3 4 5 6 ] + [ 10 20 10 20 10 20 ]

Some Coding Techniques

  • 记得创建行向量np.random.randn( (5,1) )

    列向量np.random.randn( (1,5) )

    而不要使用np.random.randn( 5 )

  • 多使用reshape()函数没有坏处

  • 尽可能多的使用assert( a.shape()==(5,1) )来保证程序的健壮性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值