Skip to content

Commit

Permalink
Merge pull request #35 from loveunk/master
Browse files Browse the repository at this point in the history
fix description errors
  • Loading branch information
fengdu78 committed Apr 6, 2019
2 parents 3f019c5 + 9eacecb commit 2175f10
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions markdown/lesson2-week1.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@

假设这是训练数据,我用一个长方形表示,我们通常会将这些数据划分成几部分,一部分作为训练集,一部分作为简单交叉验证集,有时也称之为验证集,方便起见,我就叫它验证集(**dev set**),其实都是同一个概念,最后一部分则作为测试集。

接下来,我们开始对训练执行算法,通过验证集或简单交叉验证集选择最好的模型,经过充分验证,我们选定了最终模型,然后就可以在测试集上进行评估了,为了无偏评估算法的运行状况。
接下来,我们开始对训练集执行算法,通过验证集或简单交叉验证集选择最好的模型,经过充分验证,我们选定了最终模型,然后就可以在测试集上进行评估了,为了无偏评估算法的运行状况。

在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的70%验证集,30%测试集,如果没有明确设置验证集,也可以按照60%训练,20%验证和20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。
在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的70%训练集,30%测试集。如果明确设置了验证集,也可以按照60%训练集,20%验证集和20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。

![](../images/ebbfb8514ff5a983f41e938d5870b79d.png)

如果只有100条,1000条或者1万条数据,那么上述比例划分是非常合理的。

但是在大数据时代,我们现在的数据量可能是百万级别,那么验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法,检验哪种算法更有效,因此,验证集要足够大才能评估,比如2个甚至10个不同算法,并迅速判断出哪种算法更有效。我们可能不需要拿出20%的数据作为验证集。
但是在大数据时代,我们现在的数据量可能是百万级别,那么验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法,检验哪种算法更有效,因此,验证集只要足够大到能评估不同的算法,比如2个甚至10个不同算法,并迅速判断出哪种算法更有效。我们可能不需要拿出20%的数据作为验证集。

![](../images/1224fb0922d5673c380e6dad9ded0b6b.png)

Expand Down Expand Up @@ -169,7 +169,7 @@

我们用逻辑回归来实现这些设想,求成本函数$J$的最小值,它是我们定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失,$w$和$b$是逻辑回归的两个参数,$w$是一个多维度参数矢量,$b$是一个实数。在逻辑回归函数中加入正则化,只需添加参数λ,也就是正则化参数,一会儿再详细讲。

$\frac{\lambda}{2m}$乘以$w$范数的平方,$w$欧几里德范数的平方等于$w_{j}$($j$ 值从1到$n_{x}$)平方的和,也可表示为$w^{T}w$,也就是向量参数$w$ 的欧几里德范数(2范数)的平方,此方法称为$L2$正则化。因为这里用了欧几里德法线,被称为向量参数$w$的$L2$范数。
$\frac{\lambda}{2m}$乘以$w$范数的平方,其中$\left\| w \right\|_2^2$是$w$的欧几里德范数的平方,等于$w_{j}$($j$ 值从1到$n_{x}$)平方的和,也可表示为$w^{T}w$,也就是向量参数$w$ 的欧几里德范数(2范数)的平方,此方法称为$L2$正则化,因为这里用了欧几里德范数,被称为向量参数$w$的$L2$范数。

![](../images/fa185e95684bbe6c0e9100164aff2ee5.png)

Expand Down Expand Up @@ -209,11 +209,11 @@ $L2$正则化是最常见的正则化类型,你们可能听说过$L1$正则化

![](../images/dafb163da5b9c3ece677a7ebce05b680.png)

我们用$ dW^{[l]}$的定义替换此处的$dW^{[l]}$,可以看到,$W^{[l]}$的定义被更新为$W^{[l]}$减去学习率$a$ 乘以**backprop** 再加上$\frac{\lambda}{m}W^{[l]}$。
我们用$ dW^{[l]}$的定义替换此处的$dW^{[l]}$,可以看到,$W^{[l]}$的定义被更新为$W^{[l]}$减去学习率$\alpha$ 乘以**backprop** 再加上$\frac{\lambda}{m}W^{[l]}$。

![](../images/f752bc74e0978320a72bcb15d1777cf8.png)

该正则项说明,不论$W^{[l]}$是什么,我们都试图让它变得更小,实际上,相当于我们给矩阵W乘以$(1 -a\frac{\lambda}{m})$倍的权重,矩阵$W$减去$\alpha\frac{\lambda}{m}$倍的它,也就是用这个系数$(1-a\frac{\lambda}{m})$乘以矩阵$W$,该系数小于1,因此$L2$范数正则化也被称为“权重衰减”,因为它就像一般的梯度下降,$W$被更新为少了$a$乘以**backprop**输出的最初梯度值,同时$W$也乘以了这个系数,这个系数小于1,因此$L2$正则化也被称为“权重衰减”。
该正则项说明,不论$W^{[l]}$是什么,我们都试图让它变得更小,实际上,相当于我们给矩阵W乘以$(1 - \alpha\frac{\lambda}{m})$倍的权重,矩阵$W$减去$\alpha\frac{\lambda}{m}$倍的它,也就是用这个系数$(1-\alpha\frac{\lambda}{m})$乘以矩阵$W$,该系数小于1,因此$L2$范数正则化也被称为“权重衰减”,因为它就像一般的梯度下降,$W$被更新为少了$\alpha$乘以**backprop**输出的最初梯度值,同时$W$也乘以了这个系数,这个系数小于1,因此$L2$正则化也被称为“权重衰减”。

![](../images/cba0f1c7a480139acb04e762e4fe57f8.png)

Expand Down Expand Up @@ -247,7 +247,7 @@ $L2$正则化是最常见的正则化类型,你们可能听说过$L1$正则化

![](../images/f35d94efc03123e4a5de6496c1b896c0.png)

用$g(z)$表示$tanh(z)$,那么我们发现,只要$z$非常小,如果$z$只涉及少量参数,这里我们利用了双曲正切函数的线性状态,只要$z$可以扩展为这样的更大值或者更小值,激活函数开始变得非线性。
用$g(z)$表示$tanh(z)$,我们发现如果 _z_ 非常小,比如 _z_ 只涉及很小范围的参数(图中原点附近的红色区域),这里我们利用了双曲正切函数的线性状态,只要$z$可以扩展为这样的更大值或者更小值,激活函数开始变得非线性。

![](../images/884d5768243f4badc77356f843cb8c0c.png)

Expand Down Expand Up @@ -289,13 +289,13 @@ $L2$正则化是最常见的正则化类型,你们可能听说过$L1$正则化

![](../images/9fa7196adeeaf88eb386fda2e9fa9909.png)

这是网络节点精简后的一个样本,对于其它样本,我们照旧以抛硬币的方式设置概率,保留一类节点集合,删除其它类型的节点集合。对于每个训练样本,我们都将采用一个精简后神经网络来训练它,这种方法似乎有点怪,单纯遍历节点,编码也是随机的,可它真的有效。不过可想而知,我们针对每个训练样本训练规模极小的网络,最后你可能会认识到为什么要正则化网络,因为我们在训练极小的网络
这是网络节点精简后的一个样本,对于其它样本,我们照旧以抛硬币的方式设置概率,保留一类节点集合,删除其它类型的节点集合。对于每个训练样本,我们都将采用一个精简后神经网络来训练它,这种方法似乎有点怪,单纯遍历节点,编码也是随机的,可它真的有效。不过可想而知,我们针对每个训练样本训练规模小得多的网络,最后你可能会认识到为什么要正则化网络,因为我们在训练规模小得多的网络

![](../images/70b248490e496fed9b8d1d616e4d8303.png)

如何实施**dropout**呢?方法有几种,接下来我要讲的是最常用的方法,即**inverted dropout**(反向随机失活),出于完整性考虑,我们用一个三层($l=3$)网络来举例说明。编码中会有很多涉及到3的地方。我只举例说明如何在某一层中实施**dropout**

首先要定义向量$d$,$d^{[3]}$表示一个三层的**dropout**向量:
首先要定义向量$d$,$d^{[3]}$表示网络第三层的**dropout**向量:

`d3 = np.random.rand(a3.shape[0],a3.shape[1])`

Expand Down

0 comments on commit 2175f10

Please sign in to comment.