吴恩达DL课程学习笔记——NN & DL(第二周)

第二周——神经网络基础

1、二分类问题

(1)二分类器输入为sample feature vector,输出为0和1,用于预测该样本是否为正类,本质上是在计算给定样本,它属于正类的概率。
(2)input sample feature vector作为输入矩阵X的列向量,output label作为输出矩阵y的列向量。
(3)向量是矩阵的特殊形式,标量是向量的特殊形式。
(4)NN的矩阵的表示形式,Y=activation(WX+b),W为权重矩阵,b为偏置向量。

2、logistic回归

(1)计算给定样本,它属于正类的概率,是一个二分类器。
(2)使用sigmoid激活函数的单神经元的网络,y^=logistic(z),z=wx+b,w为权重向量,x为特征向量,b为偏置值,y^,z和b均为标量。
(3)往线性回归加上了一个非线性激活函数。
(4)more in sigmoid

3、logistic回归的损失函数

(1)针对样本i,损失函数为:L(y^i, yi)=-(ylogy^+(1-y)log(1-y^))
这是一个凸函数,loss(w, b)刻画了real output 和 expect output之间的差异。
(2)if y=1, L = -logy^,调整模型参数使得loss尽可能小,则y^会尽可能大,则y^会趋近于1,即实际输出会趋近于真实输出;同理,if y=0,则y^会趋近于0。
(3)由于sigmoid函数将z归一化到(0, 1)之间,故y^的取值也只能在0和1之间。
(4)loss刻画了模型在某个样本之上的表现,成本函数cost function J(w, b)刻画了在整个训练集上的表现。
(5)J(w, b)=1/m * sum of loss function。
(6)The cost function is the average of the loss function of the entire training set. We are going to find the parameters w and b that minimize the overall cost function.
(7)logistic回归可以看作是一个使用sigmoid激活函数的单神经元的网络。
(8)机器学习是一个优化问题,我们说学到一个模型,学到这些模型参数,其实就是求解一个优化问题 =>
cost function/loss func作为目标函数(需要使得实际输出趋近于预期输出),优化变量是模型参数,调整模型参数,使得目标函数最小 =>
即找到全局最小值,最小值点即最优解(解空间即参数向量空间)=>
于是就学到了参数,我们就说从数据中学到了模型。

4、梯度下降法

(1)每一轮迭代,每一个min batch(可以是一个样本+label,也可以为整个训练集),update param,确定梯度方向,loss在loss曲面上沿着最速下降方向下降。
(2)如果函数只有一个变量,则使用导数符号d,若函数有多个变量,则使用偏导数符号。

5、导数

(1)导数:对于一元函数(即该函数只有一个变量),即(原)函数的导(函)数,自变量取各个值时,函数在该点的变化率,函数在该点切线的斜率。
(2)偏导:对于多元函数(该函数有多个变量),固定其他自变量,对当前变量求导数,只有当前变量可变,当前变量取各个值时,函数的变化率。
(3)微分:导数刻画了函数的变化率,微分则刻画了函数的增量,当自变量增加了Δx,因变量则增加Δy=Δx×y'。

6、更多导数的例子

主要是讲了如何计算函数的导数,直接看高数书即可。


一些导数计算公式
7、计算图

张量 -> 张量 -> 张量
TensorFlow
forward pass计算模型的输出和loss,backward pass通过链式求导计算loss关于各个模型参数的偏导,即用BP算法计算梯度。

8、在计算图中计算导数

(1)forward pass计算针对这个input-output pair的loss,the loss of min-batch = the average of loss func of min-batch data,该轮迭代的损失=各个min-batch的损失求平均。
(2)loss func是模型参数的函数,但是由于每个input sample和label可能是不一样的,所以每个输入输出对对应的损失函数也可能是不一样的。
(3)BP算法就是在反向地逐层计算梯度。针对每一个input-outpu pair,都会有一个前向和反向过程(非向量化实现)。
(4)y=f(z), z=g(x),复合函数,计算y关于x的导数,链式法则,链式求导,dy/dx=dy/dz * dz/dx。
(5)一个简单的计算图,x -> m -> n -> y,dy/dx = dy/dm * dm/dx。简化表示为,dx = dm * dm/dx。
(6)更多详见下图:


在计算图中计算导数

(7)NN就是一个复合函数,backward pass通过BP算法计算针对这个input-output pair的梯度,求平均得到针对这个min-batch的梯度。

9、单样本训练logistic回归模型
单样本训练logistic回归模型
10、基于训练集(有m个输入输出对)训练logistic回归模型

(1)u=f(x), v=g(x), (u+v)' = u' + v'。
(2)我们只画针对一个input-output pair的计算图,针对每一个input-outpu pair,都会有一个前向和反向过程。
(3)这里实际上是一个BGD,求平均,得到针对整个训练集的梯度。
(4)训练的伪代码如下,也就是如何通过BP算法计算梯度,然后利用梯度下降求解该优化问题。

J = 0  // cost func
dw1 = 0  // dJ/dw1
dw2 = 0  // dJ/dw2
db = 0  // dJ/db

// 一轮迭代
for i=1 to m:
    // forward pass
    zi = wTxi+b  // linear model
    ai = sigmoid(zi)  // the output of logistic regression model
    J += -[yi*logai + (1-yi)log(1-ai)]  // 每个input-output pair都会计算一个loss
    
    // backward pass
    dzi = ai - yi
    dw1 += x1i*dzi  // 每个input-output pair都会计算dloss/dw1
    dw2 += x2i*dzi
    db += dzi
J /= m  // 得到整个训练集平均的loss
dw1 /= m  // 得到针对整个训练集的梯度
dw2 /= m
db /= m

// update model param
w1 := w1 - LR * dw1
w2 := w2 - LR * dw2
b := b - LR * db
11、向量化

如果要计算两个向量的点积,使用np.dot(x, y),向量化,避免显示的for循环(这是串行的)。
CPU和GPU都有SIMD指令,数据并行,加速代码的运行过程。
SIMD和向量化还有待继续学习!!

12、更多向量化的例子
u = np.exp(v)
u = np.log(v)
u = np.abs(v)
u = v**2
u = 1/v
13、向量化logistic回归

通过向量化,避免使用显示的for循环。
每个input sample作为输入矩阵X的列向量。

Z = wTX + b
A = sigmoid(Z)

X -> Z -> A,完成了logistic回归模型的一次forward pass。

14、向量化logistic回归的梯度计算

向量化之后,backward pass如何计算梯度,如何链式求导,还有待进一步学习。


向量化logistic回归的梯度计算
15、Python中的广播

(1)A矩阵和B矩阵为同型矩阵,则A和B可以做element wise的操作,例如+-*/。
(2)若A为m*n的矩阵,B为(m, 1)或(1, n),或为一个标量,则Python的广播机制会复制堆叠使得B的shape与A一致,使得A和B可以做element wise的操作。
(3)若a为(1, n)的行向量,b为(m, 1)的列向量,它两会先复制堆叠使得shape一致,变成(m, n),然后可以做element wise的操作。

16、Python numpy向量的一些注意事项

(1)不要使用rank 1 array,即不要使用秩为1的数组,例如a = np.random.randn(5),a.shape为(5, ),这是一个秩为1的数组。
(2)使用(5, 1)的矩阵,将它视做列向量,使用(1, 5)的矩阵,将它视做行向量。
(3)使用断言来判断变量的shape,assert(a.shape == (5, 1))
(4)将shape为(5, )的变量通过reshape操作变为shape为(5, 1)的矩阵,即列向量。

17、logistic回归成本函数的一些解释

我们基于有标签数据集以监督学习的方式训练模型 =>
基于MLE的思想,既然该数据集出现了,则认为该数据集有这样的一些label概率是最大的 =>
调整模型参数,使得该概率最大 =>
由于label已知,而模型参数未知,故为似然函数 =>
取对数是为了易于计算(由于样本标签取值是条件独立的,所以该数据集有这样的一些label的联合概率可以转换为连乘的形式) =>
取负数,将负的训练集的对数似然函数作为目标函数,即成本函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容