Neural Networks and Deep Learning 第二周笔记

Neural Network Basics

Posted by baiyf on November 14, 2017

Logistic Regression as a Neural Network

sigmoid

在logistic regression后加一个非线性函数,例如sigmoid()可以使输出满足概率特性

0Pi1

Pi=1

损失Loss函数$L$

损失函数常用预测值和标签的交叉熵定义:

L(ˆy,y)=(ylogˆy+(1y)log(1ˆy))

y代表标签,ˆy代表预测值

##成本Cost函数$J$

成本函数是损失函数$L$的求和取均值,是对整个训练集定义的

J(w,b)=1mmi=1L(ˆy(i),y(i))

梯度下降法

整个神经网络训练的目的就是使成本函数J(w,b)最小,可以用梯度下降法调整wb满足要求,梯度下降可以定义为下面的形式,通过反复迭代找到最优解

Repeat:{

w:=wαdJ(w,b)dw

b:=bαdJ(w,b)db

}#α代表学习率

计算图

把一个计算过程用图形的方式表示出来,方便前向计算和反向求导

computation_graph

单层神经网络的梯度下降应用

若神经网络可以定义为:

z=w1x1+w2x2+b$>$a=σ(z)$>$L(a,y)

dLda=ya+1y1a

dLdz=dLdadadz=ay

Python和向量化

基于CPU和GPU都有并行化的SIMD(singal instraction multiply data)指令,如果用python内置函数例如np.dot(),可以充分利用并行性去快速计算

在Python与Numpy编程中需要特别注意变量的维数,例如下面几种定义代表不同的类型

a = np.random.rand(5)		#(5,)
b = np.random.rand(5,1)		#(5,1)
c = np.random.rand(1,5)		#(1.5)

所以十分有必要在代码中用assert语句检验变量的维数,或者reshape()函数改变变量的维度:

c = c.reshape(5,1)
assert(c.shape == (5,1))