对神经网络的深入思考

发布于:2022-11-07 ⋅ 阅读:(650) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

神经网络直观上的理解,就是可以通过多层的网络来拟合空间中任意一个函数,但是如果深入的思考一下就会产生很多的疑问,比如神经网络拟合的到底是什么样的函数呢?loss函数和优化器除了是在帮助模型更新参数以外,到底是在做什么的呢?


一、Three steps for deep learning

Alt
李宏毅老师课中讲了,机器学习和深度学习分成三个简单的步骤,然后通过这三步就能找到最好的那个要拟合的函数。

二、neural network

在实现深度学习的第一步,定义的那个函数就是神经网络。神经网络的不同连接方式会构建出不同的神经网络架构,也就会导致不同的函数。
在这里插入图片描述
在这里我们以全连接的方式举例介绍神经网络,即全连接神经网络(Fully connect feedforward network)。在全连接神经网络中,将神经元排成一排一排的,然后每一个神经元都有一组weight和bias,这个weight和bias是通过训练找出来的,比如我们现在网络结构和权重都已经知道,如下图。

在这里插入图片描述
当我的输入是 [ 1 − 1 ] \begin{bmatrix}1 \\-1 \end{bmatrix} [11] [ 0 0 ] \begin{bmatrix}0 \\0 \end{bmatrix} [00],因为网络的参数都是已知的,所以我可以得到固定的输出 [ 0.62 0.83 ] \begin{bmatrix}0.62 \\0.83 \end{bmatrix} [0.620.83] [ 0.51 0.85 ] \begin{bmatrix}0.51 \\0.85 \end{bmatrix} [0.510.85]。这是的神经网络就是一个确定的函数,给它输入就可以得到固定的输出。

如果现在不知道网络的参数,即网络的参数没有固定,可以取任何值,则这个神经网络就是定义了一个函数的集合。**因为参数可以任意取值,则这些参数取值的不同组合就是一个不同的函数,所有组合加起来就是一个函数的集合。所以一个神经网络还没训练,只是把架构架起来,即确定这些神经元如何连接,这时就确定了一个函数集合(function set)。**在训练的时候,使用梯度下降来找一组参数,去挑一个最适合自己任务的函数。

在这里插入图片描述

在我们自己构建神经网络的时候,我们需要设计网络的结构,网络的层数和每层的神经元的个数等等都是没有限制的,我们可以随意设计,我们决定的网络的layer数目和每层的neural数目等结构就决定了function set长什么样子如果决定了一个比较差的function set,里面没有包含任何好的function,那在训练中找最好的function的时候就找不到很好的function。因此决定一个好的function set非常关键,即决定神经网络的结构是很关键的。


总结

神经网络本质就是一个数学函数,只不过这个函数比较复杂,我们无法手写出来。在设计网络结构的时候,网络结构就包含了一个函数的集合,不同结构就决定了不同的函数集合,这个我们在上面也介绍了。更深入的来解释网络结构包含的函数集合可以从几个主流的网络结构来举例介绍,我们应该都知道几个经典的神经网络,全连接神经网络、卷积神经网络、循环神经网络、transformer结构等等。每一类下的所有可能的网络结构构成一个函数集合,比如卷积神经网络,所有我们可以设计的卷积神经网络就可以构成一个函数集合A,然后每一个类型的卷积网络又是一个函数集合B(比如resnet类型网络就是一个函数集合),但是函数集合B是包含在A中的,然后具体的某一个卷积网络又是一个函数集合C(比如Resnet-50),C是包含在B中的。前面的这个包含关系对于全连接神经网络、循环神经网络、transformer等等都是适用的。不同的网络架构规定的那个函数集合是不同的,对于具体的问题,在集合中搜索最优解的时候,不同的函数集合搜索出来的最优解是不同的,这也就说明了为什么有的网络在某些问题上比其他网络要好的原因。比如现在的transformer比RNN和CNN表现都要好,这就说明了Transformer的函数集合包含了比RNN和CNN更好的函数解。

本文含有隐藏内容,请 开通VIP 后查看