C/C++教程

深度学习入门系列之doc

本文主要是介绍深度学习入门系列之doc,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

这周老师让把深度学习的名词过一遍,小玛同学准备在过一遍Deep Learning名词的同时把基本的模型也过一遍。
感谢杰哥发我深度学习入门系列能让我有机会快速入门。
下面就来doc一些学到的东西

线性感知器

感知器(线性单元)有个问题就是当面对的数据集不是线性可分的时候,“感知器规则”可能无法收敛,这意味着我们永远无法完成一个感知器的训练。(即如果我们需要用感知器(神经元)拟合的映射不是线性的,那么需要用在拟合中添加非线性的函数)

SGD vs BGD

SGD: Stochastic Gradient Descent
BGD: Batch Gradient Descent
SGD 和 BGD 之间的主要区别在于每次迭代的更新步骤。BGD 在每一步都使用整个数据集计算梯度,而 SGD 在每一步都使用单个样本或一小批样本计算梯度。这使得 SGD 比 BGD 更快,计算成本更低。
然而,在凸集中,由于其随机性质,SGD 可能永远无法达到全局最小值,而是不断在接近全局最小值的区域内游荡。另一方面,BGD 只要有足够的时间和合适的学习率,就能保证找到全局最小值。
但是在非凸集中,随机性有助于我们逃离一些糟糕的局部最小值。

感知器 vs 神经元

一般情况下,说感知器的时候,它的激活函数是阶跃函数;当我们说神经元的时候,激活函数往往选择为sigmoid函数或者是tanh函数。

sigmoid函数

sigmoid函数的导数非常有趣,它可以用sigmoid函数自身来表示。这样,一旦计算出sigmoid函数的值,计算它的导数的值就非常方便。
\(y = sigmoid(x)\) , 则 \(y^{\prime} = y(1 − y)\)

梯度检查

下面是梯度检查的代码。如果我们想检查参数 的梯度是否正确,我们需要以下几个步骤:

  1. 首先使用一个样本 \(d\) 对神经网络进行训练,这样就能获得每个权重的梯度。
  2. \(w_{ji}\) 加上一个很小的值( \(10^{-4}\) ),重新计算神经网络在这个样本 \(d\) 下的 \(E_{d+}\)
  3. \(w_{ji}\) 减上一个很小的值( \(10^{-4}\) ),重新计算神经网络在这个样本 \(d\) 下的 \(E_{d-}\)
  4. 根据下面的公式计算出期望的梯度值,和第一步获得的梯度值进行比较,它们应该几乎想等(至少4位有效数字相同)。

\[\frac{\partial E_d(w_{ji})}{\partial w_{ji}} \approx \frac{f(w_{ji} + \epsilon) - f(w_{ji} - \epsilon)}{2\epsilon} \]

当然,我们可以重复上面的过程,对每个权重 \(w_{ji}\) 都进行检查。也可以使用多个样本重复检查。

这篇关于深度学习入门系列之doc的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!