“非线性思想” 真的神了 !

大家好啊,我是董董灿。

本篇文章是什么是神经网络的非线性的后续,之所以写这篇文章,是因为有小伙伴看了上一篇之后有个疑问,那就是:

为什么加了relu 这种激活函数之后,神经网络就可以拟合出任意复杂的函数了呢?relu 函数小于零的输出永远是零啊。

下面就带着这个疑问,一起来看看这个问题吧。

1、先看下线性函数的局限

假设我们使用的神经网络只包含线性函数,在这种情况下,无论神经网络有多少层,那么整体而言,神经网络仍然是一个线性函数。

这是因为多个线性变换的组合仍然是线性的,这个例子的解释可以查看:什么是神经网络的非线性。

这种线性变换组合的思想,我们都能理解,但关键是,为什么引入一个 relu 函数之后,一切就变了呢。

2、非线性逼近其他函数的例子

我们以 relu 这个最简单的非线性函数来举例,relu 函数的图形如下。

考虑一个线性模型:

这里,w 是权重,b 是偏置,无论我们如何调整 w 和 b,这个模型都只能是一个线性模型。

即使我们堆叠再多个这样的线性层,整个网络仍然只能表示线性关系,无法捕捉复杂的非线性关系。

现在,我们在这个线性函数 f(x) 的基础上,引入一个非线性函数 relu, relu 用公式可以写成下面这样:

将 relu 应用于上述线性模型的输出上,则:

此时,我们假设 w = 2, b = -1, 那么函数可以写出:

也就说,当 x < 0.5 时,y = 0;x >= 0.5 时,y = 2x - 1,将这个图像画出来,大概是如下的样子:

现在重新修改下 w 和 b 的值,假设此时 w = -1, b = 5, 那么函数就可以表示为:

y = Relu(-x + 5)

则, x < 5 时,y = 5 - x; x >= 5 时, y = 0;此时函数图像为下面的样子。

从上述两个例子可以看出,通过调整 w 和 b 的值,包括但不限于增大减少、调整正负等方法,可以生成任意的分段函数。

一个简单的 relu 函数就可以通过调整w 和 b 的值,拟合任意的分段函数,更别提其他的非线性函数比如 sigmoid 了。

而在深度神经网络中,有很多大量的神经元和激活层,通过这些激活层的叠加,理论上神经网络就可以逼近任意的函数了。

3、 万能逼近定理

为了更加严谨的说明这个问题,我们引入一个数学上的定理,叫作"万能逼近定理"。

这个定理表明一个具有足够数量隐藏层和足够数量神经元的神经网络,只要使用非线性激活函数,就能够以任意精度逼近任意函数。

而我们从上面举得两个例子也可以看出:只要神经网络中有足够多的神经元和非线性激活层,只要层数足够深,通过神经网络的自我学习,它可以学到足够的参数组合(比如上面说的 w 和 b 的组合)。

这些参数组合形成构成的一些非线性函数的叠加,理论上便可以拟合任意函数,这也是深度学习在处理各种任务中取得成功的关键原因之一。

现在的大模型为什么效果这么好,就是因为他们的参数量很多,动辄就几百上千亿,拟合一些超级复杂的函数不在话下。

甚至科学家也搞不清楚它到底拟合了什么函数,或者说此时拟合的不能再用一个函数来表示,更多的是一个复杂的网络,像是人脑一样。

但是通过大量的互联网数据训练出来的这个类似人脑的复杂网络,实际效果就是很有效。

本文首发于公众号:董董灿是个攻城狮。参考:^ 非线性思想真的神

相关推荐
坚持编程的菜鸟43 分钟前
LeetCode每日一题——困于环中的机器人
c语言·算法·leetcode·机器人
Aurorar0rua2 小时前
C Primer Plus Notes 09
java·c语言·算法
我不是QI5 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥5 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
明月(Alioo)6 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树6 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
lingran__6 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech20256 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn
小冯记录编程7 小时前
深入解析C++ for循环原理
开发语言·c++·算法
chenchihwen8 小时前
深度解析RAG系统中的PDF解析模块:Docling集成与并行处理实践
python·算法·pdf