您的位置:首页 > 理论基础 > 计算机网络

神经网络和深度学习笔记(一)

2017-10-16 20:10 316 查看

神经网络和深度学习笔记(一)

Logistic回归算法(Logistic Regression)

[用于二分分类的算法]

(一)基础知识

二分分类

Created with Raphaël 2.1.0InputInputOutputOutput0(NOT)1(IS)

计算机如何保存图片

输入的是特征变量 x

保存3个矩阵,对应RGB,如果图片尺寸64*64,则有3个64*64的矩阵

怎么计算特征变量?

xn=[R1,G1,B1.R2…]^T

维度nx=64*64*3

traning example里有多个样本,每个样本得x1,x2,x3……

x=[x1,x2,….]

有对应的label y=[y1,y2…]

补充:Python中X.shape输出矩阵维度 X.shape=(n.m) Y.shape=(1,m)

sigmod函数



(二)函数模型

成长函数

w,b要求的,(x(1),y(1))表示第一个样本,x为特征向量,y为label



loss(error) function

直观容易得到误差式子,但结果将会多个最优值(多个谷底)



由此思考得到另一条



cost function(全局成本函数)

在训练Logistic回归模型的时候需要找到合适的w,b使得误差最小,此处可用到梯度下降法。



(三)梯度下降法



J(w,b)为曲面高度,找到曲面最低点即是j最优,且得到w,b,而从这里可以看出logistic的回归函数是一个凹函数,选择凹函数。

Reapeat{

w:=w-αdw

b:=b-αb

}

通过断更新往最优方向走,详情看笔记本的图解

由公式知,需要dw,db,α(计算如下)

(四)计算偏导数来实现logistic回归

核心关键点



只有一个样本的例子

[Input]

x1,x2(特征向量),w1,w2,b

[Output]

z=w1x1+w2x2+b



L(a,y)

[求dw(dw1,dw2…),db](用于求梯度,详情看公式)

dz/dw1=(w1x1+w2x2+b)’=x1dz

dz/dw2=(w1x1+w2x2+b)’=x2dz

[求dz]

dz=dL/dz=dL/da*da/dz=a-y

应用到m个样本

【成本函数要求的是m个样本损失函数值的平均值 】



【J对w1求导得出全局梯度值dw1即算法中算出来的dw1,其他同理】

【算法】这个过程需要重复多次

//假设只有两个特征值w1,w2,每个样本(x(i),y(i))
J=0 //全局成本函数
dw1=0 //w1全局梯度值
dw2=0 //w2全局梯度值
b=0 //适合的常数
for i=1 to m
//每次对单个样本操作
z(i)=w^T*x(i)+b
a(i)=s(z(i+1))
J+=-[y(i)log(a(i))+(1-y(i))log(1-a(i))] //损失求和
dz(i)=a(i)-y(i) //求dz
//求梯度下降需要的各参数和
dw1+=x1(i)dz(i)
dw2+=x2(i)dz(i)
db+=dz(i)
J=J/m
dw1=dw1/m
dw2=dw2/m
db=db/m
//应用梯度下降
w1:=w1-αdw1
w2:=w2-αdw2
b:=b-αb


(五)向量化实现,同时处理整个训练集,实现梯度下降法的一部迭代

- 原来的算法

每个样本都要计算z,a,需要计算m次,怎么不用for?=x

可以在矩阵中运算

当x=[x1^t,x2^t…](x1是一个向量)

z=w^tx+b(作为一个矩阵运算)



//一次迭代(可以多次)
//以下都是同时计算
python代码:Z=np.dot(w^T,X)+b //计算z
A=sigmod(Z) //得到a
dz=A-Y
//求梯度下降需要的各参数和
dw=np.dot(X,dz)
db=np.sum(dz)
J=J/m

dw=dw/m
db=db/m
//应用梯度下降

w:=w-αdw
b:=b-αb


()python调试技巧

- 不要用秩为1的结构,即在定义的时候要用(n,m)而不是(n)

它与行向量或列向量不一样,效果不太直观,应该定义为行向量或列向量,直接用reshape(n,m)确保需要的维度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐