你真的明白神经网络是什么?

本文探讨了神经网络的本质,解释了它是如何通过线性与非线性层结合实现函数逼近的。此外,介绍了损失函数在训练过程中的作用,以及在手写体数字识别案例中如何使用Pytorch进行标准化、构建模型、选择损失函数和训练神经网络。
摘要由CSDN通过智能技术生成

nn2.png

前两天有网友找我,让我解释下神经网络到底是什么东东。这位朋友他学习了吴恩达大神的深度学习课程,对神经网络、神经元、激活函数、损失函数等都有所了解,他以为自己已经搞懂了什么是AI,但细想之下发现自己竟然连神经网络的概念都讲不清楚。

对于这个问题,一开始我也是有些蒙圈的,我知道它是什么但却无法给出清晰准确的定义,这篇博文就是我对神经网络再学习的知识总结,希望能对同样困惑的朋友有所帮助。

神经网络是函数

在Michael Nielsen大神的著作 Neural Networks and Deep Learningchapter 4: A visual proof that neural nets can compute any function
,他论证了在通用逼近理论(universal approximation theorem)的作用下,只要神经网络足够大(隐层神经元足够多),它可以逼近任意函数(can compute any function)。

机器学习,实际上是寻找一种数学模型,让这个模型符合它所要描述的对象。比如说我们要寻找一个能区分出Figure 1中蓝色和橙色点的模型,用它可以区分现有的以及未来可能新增的点,这个数学模型就是图中的白线,即ax + b = y,只要计算出a和b,就可以用函数ax + b来解决Figure 1的分类问题。

Figure 1: binary classification from playground.tensorflow.org

理论上说,神经网络可以逼近任意函数,即找到解决任何难题对应的数学模型,而且隐层的神经元数越多就越逼近目标函数。例如,对于同一个神经网络,用猫狗图片的数据集训练它,它就是可以判断你给它看的是猫的还是狗的图片,如果你用它来训练英文文本,它就可以根据你提供的一段英文句子来预测下一个最有可能出现的英文单词。所以说,神经网络是函数,一种无限灵活的数学模型生成函数。

神经网络是Linearity + Non-Linearity

从网络架构来看,神经网络中的隐层是由线性层+非线性层构成,线性层是权值矩阵,非线性层则是激活函数。在linearity + non-linearity的结构下,逼近理论(universal approximation theorem)就会起作用,非线性层将线性层中矩阵计算的结果转化为step function,一个个神经元的step function构成了一个个小箱子(bumps),通过调节Figure 2中神经元权值的大小来调节箱子的长宽高,进而改变整个图形的形状,以逼近任意的曲面(或函数)。

Figure 2

损失函数是衡量逼近效果的量化工具

以Figure 1的数学模型ax + b为例,假设在初始化时给a和b赋随意值,神经网络的训练就是要调整a和b以改变白线的位置和方向,至于如何调整a、b,是增加还是减少,增减的量是多少,这些信息是通过函数对a、b求导得到的。

损失函数是用于计算神经网络生成的函数和真实函数(ground true)的差异值。假设在Figure 2的3D图形中叠加一个相似的图形,两个图形之差的体积就是损失函数的计算结果,也称为损失值–loss,loss值越小表示模型逼近效果越好。通过loss对神经元权值求导,可以知道按照对应导数来调整权值大小的同时会对图形产生什么样的改变。

当然,损失函数并不是唯一的,常用的有MSE(mean square error)、MAE(L1 loss, mean absolute error)、NLLoss(Negative log likelihood function)等,不同的损失函数计算的loss值也会不同,也就是说,神经元权值发生调整后,新图形的形状也会各不相同。现实情况是,根据不同的任务以及神经网络训练的不同阶段,可以采用不同的损失函数。例如MSE是神经网络默认的loss function,而线性回归问题用NLLoss比MSE更好,SSD中预测bounding box的模型则采用的是MAE。

总的来说,损失函数决定了函数形状以及每次调整形状的方向,在神经网络训练过程中可以采用不同损失函数。它就好比是我们平时生活中制定的各种目标,不管我们是采用目标拆解还是目标迂回的方法,最重要的是我们制定的这些目标要准确。损失函数也一样,如果没有选对损失函数,最终生成的函数和解决问题需要的数学模型就会有偏差,loss值越大偏差越大。

手写体数字识别 / Notebook

接下来我希望通过一个实例来帮助加深对上述知识的理解。手写体数字识别算是神经网络的“Hello World”程序ÿ

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值