writed by changfei_love life~
深度学习与神经网络
深度学习:训练神经网络的过程
目的:学会搭建神经网络,以及如何用数据训练
第一部分:逻辑回归&神经元
以猫的分类器为例:输入图片(x:特征向量),输出是否为猫(yh:0~1)
二分类:
结果只有两种情况
逻辑回归:
z=wT.x+b
yh=sigmoid(z)
其中:w(特征权重)与x同纬度向量,b为偏差
代价函数:
目的:训练参数w和b
L(yh,y)=-ylog(yh)-(1-y)log(1-yh) 分析:当L越小时,yh与y越逼近
多样本情况:
梯度下降法:
目的:求解使J最小时的w和b
思路:初始点——沿最陡方向走一步——直到全局最优
w=w-alpha.dw
b=b-alpha.db
alpha:学习率
导数的求解可借助链式法则
梯度下降用于逻辑回归:
令a=yh,计算"da"=dJ/da,再计算"dz"=(dJ/da)*(da/dz)
dz=a-y
dw=xdz
db=dz
多样本时:
这里的1,2指的是x,w中的分量
代码解决:
向量化逻辑回归:
当存在多样本时,若不使用向量化技术,则需借助循环,时间过大
令X=[x(1) x(2) … x(m)]
Y=[y(1) y(2) … y(m)]
Z=np.dot(W.T,X)+b
A=[a(1) a(2) … a(m)]=sigmoid(Z)
向量化梯度输出:
总结:逻辑回归算法程序框架
初始化(导入库,导入数据)
参数初始化(w,b)
循环迭代:
/t前向计算A,cost
/t反向计算dw,db
/t更新w,b
预测
第二部分 浅层神经网络
神经网络的表示:
2层结构:0-输入层,1-隐藏层,2-输出层
注意:这里隐藏层少画了一个神经元
计算神经网络的输出:
神经元的计算分两个步骤:z and a
由于隐藏层存在多个神经元,分析隐藏层的计算:
合并:神经元垂直放置
向量化:
多样本向量化:
若不使用向量化,需迭代计算第i个样本:
其中:W和b不需要标注i,与样本无关
向量化:各样本水平放置
少了:Z[1]=W[1]X+b[1]
水平索引对应不同的训练样本
垂直索引对应神经网络的不同节点
**函数:
a=sigmoid(z)
dz=a(1-a)
用于二分类
a=tanh(z)
dz=1-a^2
均值接近于零
a=ReLu(z)
a=Leaky ReLu(z)
导数远大于0
在不同的神经网络层中,**函数不同,用g[]表示
在神经网络中,必须使用非线性**函数
证明可知:如果全部使用线性**函数,无论隐藏层有多少层,一直只是计算线性函数,类似于直接去掉全部隐藏层。
浅层神经网络的向量化:
w,b参数维度:
梯度下降法:
前向传播:
反向传播:
随机初始化:
对于一个神经网络,如果把权重初始化为0,那么梯度下降将不会起作用。
解决方法:随机初始化参数
W[1]=np.random.randn(4,3) 0.01
b[1]=np.zeros((4,1))
W[2]=np.random.randn(1,4) 0.01
b[2]=0
搭建浅层神经网络程序步骤:
初始化
确定神经网络的大小(每层神经元数)
初始化参数(W[1],b[1],W[2],b[2])
迭代:
/t前向传播计算Z[1],A[1],Z[2],A[2]
/t计算cost
/t反向传播计算dZ[2],dW[2],db[2],dZ[1],dW[1],db[1]
/t参数更新
利用前向传播预测
第三部分 深层神经网络
深层神经网络的表示:
核对矩阵维数:
单样本情况:
多样本情况:
前向传播:
反向传播:
输入da[l],输出da[l-1],dw[l],db[l]
其中:dZ[L]=A[L]-Y
搭建神经网络块:
第l层的前向传播和反向传播块:
整个神经网络: