天天看点

吴恩达深度学习第一课第二周第二周 神经网络基础

第二周 神经网络基础

打卡(1)

2.1 二分类
吴恩达深度学习第一课第二周第二周 神经网络基础

在二分分类问题中 目标是训练处一个分类器,它以图片(本例中)的特征向量X作为输入,来预测输出的结果标签y是1还是0,也就是预测图片中是否有猫。

课程中会用到的数学符号:

  • (x,y) ( x , y ) :表示一个单独的样本;
  • x∈Rnx x ∈ R n x :表示x是 nx n x 维的特征向量;
  • y∈ y ∈ {0, 1} :标签y值为0或1;
  • 训练集有m个训练样本构成: (x(1),y(1)) ( x ( 1 ) , y ( 1 ) ) 表示样本一的输入和输出; (x(2),y(2)) ( x ( 2 ) , y ( 2 ) ) 表示样本二的输入和输出… (x(m),y(m)) ( x ( m ) , y ( m ) ) ,这些样本整个一起就表示训练集,m表示训练样本的个数。 m=mtrain(训练集),m=mtest(测试集) m = m t r a i n ( 训 练 集 ) , m = m t e s t ( 测 试 集 ) ;
  • 神经网络中构建的输入矩阵 X X 中,通常行表示样本数; 列表示特征维度。
    吴恩达深度学习第一课第二周第二周 神经网络基础

2.2 logistic回归

吴恩达深度学习第一课第二周第二周 神经网络基础

(向量ww一般默认为列向量,转置为行向量)

* sigmoid函数的函数值 ∈ ∈ {0,1},且当自变量趋近负无穷大时,函数值趋近为0; 当自变量趋近为正无穷大是,函数值趋近为1.

* 神经网络中,特征参数向量 w w 和截距bb通常看做独立的参数,不像红色公式中那样表达会更好(红色公式在本课程中不会使用)

2.3 logistic回归损失函数

吴恩达深度学习第一课第二周第二周 神经网络基础

logistic的损失函数是: −(ylogŷ +(1−y)log(1−ŷ )) − ( y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ) (logistic的损失函数之所以不用 12(ŷ −y)2 1 2 ( y ^ − y ) 2 是因为这个损失函数在使用梯度下降法时可能会产生非凸优化问题)。

* 损失函数适用于单个训练样本;而成本函数是基于参数的总成本,在训练logistic模型时,我们要找到合适的参数 w w 和bb,就是找到让的成本函数 J J 尽可能小的ww和 b b 。

打卡(2)

2.4 梯度下降法

吴恩达深度学习第一课第二周第二周 神经网络基础

通过梯度下降法求解使得成本函数最小的参数向量ww和截距 b b 。

吴恩达深度学习第一课第二周第二周 神经网络基础

* 编写代码时ww的对 J(w,b) J ( w , b ) 的偏微分用 dw d w 表示, b b 的偏微分用dbdb表示

2.5 导数

(略)

2.6 更多的导数例子

(略)

2.7 流程图

吴恩达深度学习第一课第二周第二周 神经网络基础

* 流程图是用蓝色箭头画出来的,从左到右的计算

* 流程图的导数是用红色箭头画出来的,从右到左

2.8 流程图的导数计算(反向传播)

吴恩达深度学习第一课第二周第二周 神经网络基础

2.9 logistic回归中的梯度下降

吴恩达深度学习第一课第二周第二周 神经网络基础

* "dz"=dlda∗dadz " d z "= d l d a ∗ d a d z ,

其中,

a=σ(z)=11+e−z a = σ ( z ) = 1 1 + e − z

dadz=e−z(1+e−z)2=1(1+e−z)(1−11+e−z)=a(1−a) d a d z = e − z ( 1 + e − z ) 2 = 1 ( 1 + e − z ) ( 1 − 1 1 + e − z ) = a ( 1 − a )

"dz"=a−ya(1−a)∗a(1−a)=a−y " d z "= a − y a ( 1 − a ) ∗ a ( 1 − a ) = a − y

打卡(3)

2.10 m个样本的梯度下降

吴恩达深度学习第一课第二周第二周 神经网络基础
吴恩达深度学习第一课第二周第二周 神经网络基础

2.11 向量化

Z=wTx+b Z = w T x + b ,

其中, w,x w , x 都是列向量;

代码表示为:

import numpy as np
a=np,array([,,,])
print(a)
>>>[   ]
           
import time 
a= np.random.rand()
b= np.random.rand()

tic=time.time()
tic=np.dot(a,b)
toc=time.time()

print("vectorized version:"+str(*(toc-tic))+"ms")
           

向量化计算,比循环遍历计算速度快很多。

SIMD:并行计算(在GPU和CPU都行)

2.12 向量化的更多例子

Python中实现将

V=[v1,...,vn]T V = [ v 1 , . . . , v n ] T ,转换成

U=[ev1,...,evn]T U = [ e v 1 , . . . , e v n ] T ,可以用向量化方法(避免循环遍历)。

import numpy as np
u=np.exp(v)

np.log(v)
np.abd(v)
np.maxnum(v,)
v**  #v中的每个元素平方
/v   #v中的每个元素的导数
           

2.13 向量化logistic回归

吴恩达深度学习第一课第二周第二周 神经网络基础

2.14 向量化logitici回归的梯度计算

吴恩达深度学习第一课第二周第二周 神经网络基础
吴恩达深度学习第一课第二周第二周 神经网络基础

2.15 python中的广播

(略)

2.16 关于Python/numpy向量说明

编写神经网络程序是,最好不要用1维数组,用矩阵

a=np.random.randn()
a.shape
>>>>(,)  #这不属于矩阵
           

创建向量时,把向量定义为列向量易于运算

a=np.random.randn(,)
a.shape
>>>>(,) #列向量

assert(a.shape==(,)) 声明矩阵的维度
           

2.17 Jupter/Ipython笔记本的快速指南

(略)

2.18 logistic损失函数的解释

  • 损失函数:
    吴恩达深度学习第一课第二周第二周 神经网络基础
  • 成本函数:
  • 吴恩达深度学习第一课第二周第二周 神经网络基础

继续阅读