炒股血亏后,我理解了多层感知机MLP

62 阅读5分钟

本来几年没炒股了,看着大家个个都成了股神,我热血沸腾地跑步进场,结果却成了那个‘天天跑输大盘’的韭菜,尤其是2025年9月9日,我作诗一首,只想好了标题——《韭月韭日移山洞兄弟》,意思就是亏钱亏到租不起房子准备搬到山洞里去了。

image-20250910204133859.png

复盘之后,我觉得是我的知识储备不够,于是我读了几篇财经杂志。不经意间,看到了查理芒格的这句名言:由于人类长期的进化结果,我们更倾向于用“线性”思维的方式理解世界。然而,世界的本质是非线性的。这个世界之所以有些人能取得巨大成功,而大部分人平平凡凡,关键于他们的思维方式是线性的还是非线性的。

在理解世界本质为何是非线性的时候,我觉得世界这个话题过于宏大和复杂,还是从简单的神经网络说起吧。

一、 线性模型的局限性

线性模型的本质是,它只能通过直线平面来划分数据。无论特征有多少维,线性模型的决策边界(用于分类)或拟合结果(用于回归)始终是一个超平面(在二维空间中是直线,三维空间中是平面)。

举个例子,网上之前有个很火的段子,全是线性关系:如何区分狼和狗?看神态:怒而咬牙是狼,怒而哈哧是狗;看尾巴:摇太慢是狼,晃太急是狗,弯曲是狼,顺直是狗;看剩饭:糠密是狼,糠稀是狗;看游泳:泳歪是狼,泳正是狗;看额头:后凹是狼,前隆是狗;看食米:稻剩是狼,稻光是狗;看嘴巴:衔土是狼,衔风是狗;看眼神:瞳锐是狼,瞳滞是狗;看排尿:胱尽是狼,胱续是狗;看犬舍:铺草是狼,铺衣是狗;看情感:阴暗是狼,慈喜是狗;看重量:小重是狼,大轻是狗……

狼和狗这么好区分,再说炒股,有没有一个超平面能看出股票是牛是熊呢?我自诩已经博览很多大师、博主甚至群主发表的高见,经常用线性思维去分析:如果MACD金叉,股价就会涨;如果成交量放大,股价就会上涨。但现实是,这些单一的线性规则往往会失效,线性思维在非线性的股票市场中屡屡碰壁。即便是一支不停跌的股票也有大师跟它叫慢牛或者牛回头

这正说明,**在股票市场这个复杂的非线性世界里,我们企图用一条直线(或一个超平面)来划分牛熊,本身就是个巨大的误解。**那么,我们该如何从线性的困境中突围,走向非线性呢?MLP,正是神经网络给出的答案。”

二、 MLP的核心定义

MLP通过引入(一个或多个)隐藏层,结合激活函数,克服了线性模型的局限。

其核心结构由输入层、至少一个隐藏层和输出层组成。各层之间采用全连接方式,即前一层的每一个神经元均与后一层的每一个神经元相连接,从而实现信息的全面传递。

图表达

image-20250910225908069.png

其中:

  • X\mathbf{X}输入特征,n维。
  • H\mathbf{H}隐藏层的输出,h维。
  • σ\mathbf{\sigma} 来表示激活函数
  • O\mathbf{O}输出层的输出,m维。
  • W(1)\mathbf{W}^{(1)}b(1)\mathbf{b}^{(1)} 分别是隐藏层权重偏置
  • W(2)\mathbf{W}^{(2)}b(2)\mathbf{b}^{(2)} 分别是输出层权重偏置

那么问题来了,为啥有了激活函数的加持,就能克服线性模型的局限?

代码表达

image-20250911092618477.png

三、激活函数的奥秘

1. 假如没有激活函数

如果我们没有引入激活函数,直接将第一层的输出 H 作为第二层的输入,那么最终的输出 O 将表达为:

image-20250910232444023.png

展开这个公式,可以得到:

image-20250910232548565.png

这个最终结果仍然可以被简化为一个单层的线性模型,表示为:

image-20250910232631372.png

其中,W=W(1)W(2)\mathbf{W = W^{(1)}W^{(2)}}b=b(1)W(2)+b(2)\mathbf{b=b^{(1)}W^{(2)}+b^{(2)}}

这种情况下,无论我们堆叠多少层,整个网络最终都只能表示一个线性的仿射变换。它的表达能力等同于一个单层网络,无法学习和处理复杂的非线性关系。因此,为了发挥多层网络的潜力,我们必须引入激活函数来提供非线性能力。

2. 激活函数对比

以下是几种常用的激活函数及其核心特性:

ReLU (Rectified Linear Unit)

image-20250910234454111.png

公式:f(x)=max(0,x)f(x) = \max(0, x)

特性: 计算高效,只需要简单的阈值判断即可。当输入为正时,导数恒为1,这能有效缓解梯度消失问题,从而加速收敛并使得深度网络训练成为可能。

适用场景: 由于其出色的性能,ReLU 函数是目前深度神经网络隐藏层的首选激活函数。

Sigmoid (S型函数)

image-20250910234507698.png

公式:f(x)=11+exf(x) = \frac{1}{1 + e^{-x}}

特性: 将输入值压缩到 (0, 1) 的范围内,这使其非常适合表示概率。然而,当输入值过大或过小时,函数梯度会趋近于0,导致梯度消失问题,使得网络参数难以更新。

适用场景: 由于其输出范围的特性,Sigmoid 函数常被用作二分类任务的输出层。

Tanh (双曲正切函数)

image-20250910234519644.png

公式:tanh(x)=exexex+ex\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

特性: Tanh 函数的输出范围是 (-1, 1),其均值为0且零点居中,这有助于数据的零均值化,从而加速梯度下降。不过,和 Sigmoid 类似,它同样面临梯度饱和的问题。

适用场景: Tanh 函数常被用于循环神经网络(RNN)的隐藏层。