同是程序员,为什么别人可以事半功倍?

本文通过两位程序员的故事,深入浅出地介绍了深度学习中神经网络的工作原理,包括单神经元模型如何通过调整参数拟合数据,以及如何通过增加神经元数量来拟合更复杂的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

码仔 M 是一家公司的程序员,他和大佬 Z 两人亦师亦友。最近他们都在搞深度学习。大佬 Z 经常默默修炼,而码仔 M 就不同了,他热衷于在朋友圈集赞换取各种免费课程,就好像集得越多学得越好一样。这不他又开始了……

640?wx_fmt=png

640?wx_fmt=png

码仔 M 内心 OS:“嘿嘿嘿!一时集赞一时爽,一直集赞一直爽。”

640?wx_fmt=png

640?wx_fmt=png

码仔 M 心想:“啥时候能摆脱这种蚂蚁的命运呢?愁!”

640?wx_fmt=png

640?wx_fmt=png

大佬 Z 终于忍不住了,准备亲自出手教教这位小朋友。

比如,我们可以利用神经网络来做一些数据的预测。那么首先,我们希望神经网络模型可以学习到目标数据随输入数据的变化规律。比如,对于以下目标数据:

640?wx_fmt=jpeg

当我们要求神经网络模型拟合这些数据时,我们希望模型可以根据输入得到一条曲线,在一定程度上,它与原数据的变化规律是相同的:

640?wx_fmt=jpeg

这样如果我们不考虑过拟合的问题,理论上模型就能根据给予的输入,得出符合数据规律的结果。

那么神经网络模型是如何产生像上面那样的拟合曲线的?首先看一下最简单的单神经元模型:

640?wx_fmt=jpeg

它只有一个输入层单元,其中 x 表示输入的数据;一个隐含层单元,其中 w 是输入单元到隐含单元的权重;b 是隐含层单元的偏置;一个输出层单元,其中 w' 是隐含层到输出层的权重。

这个最简单的神经网络就是一个从 x 映射到 y 的函数,即 y = w’ σ(wx+b)。w、b 和 w' 是这个函数的参数,其中 σ 表示 sigmoid 函数。当 w=1,w'=1,b=0 的时候,这个函数的图像如下:

640?wx_fmt=jpeg

这就是 sigmoid 函数即 σ(x) 的形状和数学表达式。当我们改变 w、b 和 w' 这些参数的值的时候,函数的图形也会发生相应的改变。

可以尝试在保持其它参数不变的情况下,改变其中的一个参数,观察这个参数对函数图像的影响。

首先保持 w'=1, b=0 不变,改变 w 的大小,其函数图形的变化如下图所示。

640?wx_fmt=jpeg

从上图中可以看到,当 w>0 的时候,w 的大小控制着函数的弯曲程度。w 越大,函数曲线在 0 点附近的弯曲程度就会越大(曲线越陡)。而当 w<0 的时候,曲线发生了左右翻转。

再来看看参数 b 对曲线的影响,即保持 w=w'=1,改变 b 的大小。

640?wx_fmt=jpeg

可以清晰地看到,b 控制着 sigmoid 函数曲线的水平位置。b>0,函数图形往左平移;反之往右平移。

最后,来看看 w' 是如何影响函数曲线的。

640?wx_fmt=jpeg

不难看出,当 w' > 0 的时候,w' 控制着曲线的陡峭程度;当 w' < 0 的时候,曲线的方向发生上下颠倒。

可见,通过控制 w、w' 和 b 这 3 个参数,可以任意调节从输入 x 到输出 y 的函数形状。

但是,无论如何调节,这条曲线永远都是 S 形(包括倒 S 形)的。要想得到更加复杂的函数图像,则需要引入更多的神经元。

下面把模型做得更复杂一些,看看两个隐含层神经元会对曲线有什么影响,如下图所示。

640?wx_fmt=jpeg

输入信号进入网络之后就会兵分两路,一路从左侧进入第一个神经元,另一路从右侧进入第二个神经元。这两个神经元分别完成计算,并通过 w'1 和 w'2 进行加权求和得到 y。所以,输出 y 实际上就是两个神经元的叠加。这个网络仍然是一个将 x 映射到 y 的函数,函数方程为:

640?wx_fmt=jpeg

在这个公式中,有 w1, w2, w'1, w'2, b1, b2 这样 6 个不同的参数。它们的组合也会对曲线的形状有影响。

例如,可以取 w1=w2=w'1=w'2=1,b1=-1,b2=0,则该函数的曲线形状如下图所示。

640?wx_fmt=jpeg

从上图可以看到,合成的函数图形变为了一个具有两个阶梯的曲线。让我们再来看一个参数组合,w1=w2=1,b1=0,b2=-1,w'1=1,w'2=-1,则函数图形如下图所示。

640?wx_fmt=jpeg

通过以上的参数组合,我们合成了一个具有单一波峰的曲线。一般地,只要变换参数组合,就可以用两个隐含层神经元拟合出任意具有单峰的曲线。

那么,如果有 4 个或者 6 个甚至更多的隐含层神经元,不难想象,就可以得到具有双峰、三峰和任意多个峰的曲线,我们可以粗略地认为两个神经元可以用来逼近一个波峰(波谷)。

所以,回到最初提出的目标数据,像这样的数据或许只需要具有 10 个左右神经元的模型就可以拟合。

640?wx_fmt=jpeg

当然,仅仅能做到拟合还不够,在实际使用中我们要考虑泛化,要考虑过拟合情况,而这就需要更进一步的解释了。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

听说从这之后,码仔 M 朋友圈里的好友们已经有好一段时间没有看到过他了......

告别集赞获取免费课程,实现 PyTorch 自给自足。

☟☟☟

640?wx_fmt=png

实现 PyTorch 自由,任性玩转

作者:集智俱乐部

640?wx_fmt=png

本书是一本系统介绍深度学习及开源框架 PyTorch 的入门书。全书注重实战,每章围绕一个有意思的实战案例展开,不仅循序渐进地讲解了 PyTorch 的基本使用、神经网络的搭建、卷积神经网络和循环神经网络的实现,而且全面深入地介绍了计算机视觉、自然语言处理、迁移学习,以及最新的对抗学习和深度强化学习等前沿技术。读者通过阅读本书,可以轻松入门深度学习,学会构造一个图像识别器,生成逼真的图画,让机器理解单词与文本,让机器作曲,教会机器玩游戏,还可以实现一个简单的机器翻译系统。 

作者简介

集智俱乐部(Swarma Club),成立于2003年,是一个从事学术研究、享受科学乐趣的探索者团体,也是国内最早研究人工智能、复杂系统的科学社区。倡导以平等开放的态度、科学实证的精神,进行跨学科的研究与交流,力图搭建一个中国的“没有围墙的研究所”。

目前已出版著作有《科学的极致:漫谈人工智能》和《走近 2050:注意力、互联网与人工智能》,译作有《深度思考:人工智能的终点与人类创造力的起点》。

本书配套资源

免费配套导学视频

《PyTorch入门课程:火炬上的深度学习》https://www.bilibili.com/video/av50239976

 付费配套视频课程

《深度学习原理与PyTorch实战》https://campus.swarma.org/gcou=421

文末畅聊

留言说说你有没有参加过免费集赞换课程的活动,集赞得来的课程你都看完了吗?或者说说你对 Pytorch 以及其他任何你了解的深度学习框架,你觉得它们怎么样?对你帮助大吗?精选留言选出 5 位获得赠书一本。活动截至 2019.8.21。

题图来源:freepik.com

推荐阅读:

7岁自学微积分,31岁获得菲尔兹奖,智商230,也曾因为玩游戏耽误学业!

安全专家十年磨一剑的独门秘笈,威力堪比《九阴真经》

8月书讯 | 像大师级程序员一样思考

☟☟☟ 更多深度学习好书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值