Michael Nielsen 著Neural Networks and Deep Learning关于第一章使用神经网络识别手写数字的74行Python代码之“梯度下降算法”

Michael Nielsen 著Neural Networks and Deep Learning关于第一章使用神经网络识别手写数字的74行Python代码之“梯度下降算法”

作者编著的“识别手写数字”的神经网络是基于MNIST数据集进行的,而这些数据集的图片都是 28 ∗ 28 28*28 2828大小的灰度图像,所以我们会把每一个训练输入记为 x x x,并记作一个 28 ∗ 28 = 784 28*28=784 2828=784维的向量输入给网络,而每个向量中的数值代表图像中每个像数的灰度值。同时我们使用 y = y ( x ) y=y(x) y=y(x)表示对应的期望输出,其中 y y y是一个10维向量。
例如:输入一个 x x x为784维向量,其对应数字为6的图像,那么 y ( x ) = ( 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ) T y(x)=(0,0,0,0,0,0,1,0,0,0)^T y(x)=(0,0,0,0,0,0,1,0,0,0)T
前面已经讲过感知器,S型神经元,知道了什么是权重和偏置,我们现在需要找到一个算法可以找到详细相应的权重以及偏置,使得网络的输出 y ( x ) y(x) y(x)能够拟合所有的训练输入 x x x,为了量化我们如何实现这个目标,有了代价函数的定义:
C ( w , b ) ≡ 1 2 n ∑ x ∣ ∣ y ( x ) − a ∣ ∣ 2 C(w,b) \equiv \cfrac{1}{2n}\sum_{x}||y(x)-a||^2 C(w,b)2n1xy(x)a2
公式说明: n n n是训练输入数据的个数 , a a a是表示当输入为 x x x时输出的向量,求和则是在总的训练输入 x x x上进行的。这里可以看出 C ( w , b ) C(w,b) C(w,b)是非负数,同时我们得要明确一下我们的目的 : 找到一个学习算法,它能找到适当的 w , b w,b w,b使得代价函数 C ( w , b ) ≈ 0 C(w,b) \approx0 C(w,b)0。所以这里我们采用称为梯度下降的算法来达到这个目的。
在这里插入图片描述
C C C可以是任意的多元实值函数,我们现在想象 C C C是一个只有两个变量 v 1 和 v 2 v_1和v_2 v1v2的函数,如图,我们现在需要找到全局最小值,我们同时想象一下有一个小球从山谷的斜坡滚落下来,常识告诉我们这个球会滚到谷底,我们可以利用这个算法来找到函数的最小值。那如何精确描述这个问题呢?
比如当我们在 v 1 和 v 2 v_1和v_2 v1v2方向分别将球体移动一个很小很小的量,即 ∆ v 1 和 ∆ v 2 ∆v_1和∆v_2 v1v2,球体将会发生什么情况。利用微积分的知识我们可以得到 C C C将会有如下的变化:
∆ C ≈ ∂ C ∂ v 1 ∆ v 1 + ∂ C ∂ v 2 ∆ v 2 ∆C \approx \cfrac{∂C}{∂v_1}∆v_1+ \cfrac{∂C}{∂v_2}∆v_2 Cv1Cv1+v2Cv2(7)
我们需要寻找一种选择 ∆ v 1 和 ∆ v 2 ∆v_1和∆v_2 v1v2的方法使得 ∆ C ∆C C为负——球体滚落。为了弄明白如何选择,我们记 v = v 1 , v 2 v=v_1,v_2 v=v1,v2,定义 ∆ v ∆v v v v v变化的向量,即 ∆ v = ( ∆ v 1 , ∆ v 2 ) T ∆v=(∆v_1,∆v_2)^T v=(v1v2)T。另外, C C C的梯度为其偏导数的向量,我们使用 ∇ C \nabla C C来表示,
∇ C = ( ∂ C ∂ v 1 , ∂ C ∂ v 1 ) T \nabla C=( \cfrac{∂C}{∂v_1}, \cfrac{∂C}{∂v_1})^T C=(v1Cv1C)T(8)
结合公式(7)和公式(8)于是就有了:
∆ C ≈ ∇ C ⋅ ∆ v ∆C \approx \nabla C\cdot∆v CCv
现在可以看到 ∇ C \nabla C C使得 v v v的变化与 C C C的变化关联起来
这里问:什么是梯度?暂搁置一旁
那么如何选取 ∆ v ∆v v才能让 ∆ C ∆C C变为负数?于是有了右边的假设: ∆ v = − η ∇ C ∆v=-\eta\nabla C v=ηC
因为这样子假设的话 ∆ C ≈ − η ∇ C ⋅ ∇ C = − η ∣ ∣ ∇ C ∣ ∣ 2 ∆C \approx -\eta\nabla C\cdot \nabla C=-\eta||\nabla C||^2 CηCC=ηC2,显然 ∣ ∣ ∇ C ∣ ∣ 2 > = 0 ||\nabla C||^2>=0 C2>=0,同时 ∆ C < = 0 ∆C<=0 C<=0。如果按照这样的假设去改变 v v v,那么 C C C会一直减少。而 v → v ′ = v − η ∇ C v→v^{'} =v-\eta\nabla C vv=vηC,然后用它再次更新规则来计算下一次移动,从而持续减少 C C C
整个梯度下降算法就是重复计算梯度 ∇ C \nabla C C,让后沿着相反的方向移动——沿着山谷“滚落”;梯度下降法可以视为一种使得 C C C下降最快的方向上做微小变化的方法。
这一章并没有讨论如何计算代价函数的梯度,该书第二章将会讲到反向传播,会解释如何计算这些梯度的快速算法。

### 回答1: 《神经网络深度学习》是由Michael Nielsen编写的一本计算机科学方面的书籍,该书以PDF格式发布。该书讲解了神经网络深度学习的基本概念、原理和应用。它提供了一个全面的介绍,适合初学者学习和了解这一领域。 在书中,作者首先介绍了神经网络的基本概念和工作原理。他从最简单的感知器开始,逐步讲解了多层感知器、反向传播算法神经网络的重要概念和实现方法。通过详细的数学推导和直观的图解,读者可以逐步理解神经网络是如何进模式识别和分类的。 此外,作者还深入讲解了深度学习的关键技术和算法深度学习是机器学习中的一个重要分支,通过构建深层次的神经网络来提取数据中的高层次特征,并进复杂的任务,如图像识别、语音识别等。书中介绍了卷积神经网络(CNN)、循环神经网络(RNN)等深度学习模型的基本原理和应用场景。 读者通过阅读该书,可以学习到如何使用Python和NumPy等工具构建和训练神经网络模型。作者提供了大量的示例代码和实践项目,通过动手实践,读者可以进一步加深对神经网络深度学习的理解。 总之,《神经网络深度学习Michael Nielsen PDF是一本优秀的教材,它通过清晰的讲解和实践项目,帮助读者深入了解神经网络深度学习的原理和应用。无论是对于初学者还是对于已有基础的研究人员来说,这本书都是一本很有价值的参考资料。 ### 回答2: 《神经网络深度学习》是由迈克尔&middot;尼尔森(Michael Nielsen)所的一本关于神经网络深度学习的书籍。该书于2015年开源,可以免费在网上获取它的PDF版本。这本书深入介绍了神经网络深度学习的原理和应用。 尼尔森教授在书中详细解释了神经网络的构成和运作原理,包括神经元、激活函数、前向传播和反向传播等重要概念。他还介绍了深度学习的基础知识,包括卷积神经网络和循环神经网络等常见的深度学习模型。通过深入浅出的讲解,读者可以全面理解神经网络深度学习的基本概念和算法。 这本书不仅仅是理论的介绍,它还提供了大量的实际应用示例和编程实践。读者将有机会通过实践编写代码,实现神经网络的训练和应用。其中使用Python作为编程语言,并使用NumPy等常用库来加速计算过程。 《神经网络深度学习》是一本详细且易懂的教材,适合初学者和有经验的读者。通过阅读这本书,你可以建立对神经网络深度学习的深刻理解,为进一步学习相关领域的高级概念和应用打下坚实的基础。这本书的开源性质也使得它成为学术界和业界广泛讨论和应用的基准参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值