3、深度学习入门:神经网络基础、感知机与多层感知机、激活函数、损失函数

好,咱们今天聊聊深度学习最底层的那些东西。说实话,很多人一上来就搞卷积、搞Transformer,结果连感知机是啥都说不清楚。我个人觉得,这部分就像盖楼的地基,你地基打不牢,后面再花哨的模型也容易塌。

3.1 从感知机说起

感知机,说白了就是最简单的人工神经元。1957年Frank Rosenblatt搞出来的东西,当时可火了。它的结构特别简单:输入一堆特征,每个特征有个权重,加个偏置,然后通过一个阶跃函数输出0或1。

数学上长这样:

y = f(w₁x₁ + w₂x₂ + ... + wₙxₙ + b)

其中f是阶跃函数,大于阈值输出1,否则输出0。

我在项目中遇到过一件事。有次想用单层感知机做简单的二分类,结果怎么调都收敛不了。后来才意识到——单层感知机只能解决线性可分问题。像XOR这种简单问题,它都搞不定。这就是它的致命伤。

注意:单层感知机无法解决非线性问题。这是它被冷落多年的根本原因。

3.2 多层感知机(MLP)来了

既然一层不够,那就加层呗。多层感知机就是在输入和输出之间,插入了若干隐藏层。每层都是全连接的,层与层之间通过激活函数引入非线性。

你想想看,如果不用激活函数,那多层线性变换叠加起来还是线性变换,跟单层没区别。所以激活函数才是MLP的灵魂。

我习惯把MLP看作一个函数逼近器。理论上,只要隐藏层够宽、够深,它能逼近任意复杂的函数。这就是所谓的万能逼近定理。

核心要点:深度学习的"深",指的就是隐藏层的数量。层数越多,模型表达能力越强,但训练难度也越大。

3.3 激活函数:让网络"活"起来

激活函数的作用就是引入非线性。没有它,神经网络就是个线性模型,啥复杂问题都解决不了。下面聊聊三种最常用的。

3.3.1 Sigmoid

Sigmoid把输入映射到(0,1)之间,公式是:

σ(x) = 1 / (1 + e⁻ˣ)

它的问题很明显。我曾经在做一个深层网络时,用了Sigmoid做激活,结果训练到中间几层梯度几乎为零,参数根本不动。这就是梯度消失问题。

避坑指南:我曾经在5层以上的网络里用Sigmoid,结果训练了三天loss纹丝不动。后来换成ReLU,半天就收敛了。所以现在除了二分类的输出层,我基本不用Sigmoid。

3.3.2 Tanh

Tanh是Sigmoid的升级版,输出范围是(-1,1)。公式:

tanh(x) = (eˣ - e⁻ˣ) / (eˣ + e⁻ˣ)

它比Sigmoid好一点,因为输出是零中心的,收敛速度更快。但梯度消失问题依然存在。

3.3.3 ReLU(我的最爱)

ReLU的公式简单到离谱:

ReLU(x) = max(0, x)

为什么它这么火?因为计算快、梯度不饱和、能缓解梯度消失。我现在的项目,90%的隐藏层都用ReLU。

但它也有坑。如果学习率设太大,或者初始化不好,有些神经元可能永远"死掉"——输出一直是0,梯度永远是0,再也活不过来了。这就是Dead ReLU问题。

小技巧:如果你发现训练过程中很多神经元输出恒为0,试试Leaky ReLU或者PReLU。它们给负数部分一个很小的斜率,能避免神经元死亡。

3.4 损失函数:衡量模型的好坏

损失函数就是告诉模型:你离目标还有多远。模型通过最小化损失函数来学习。

3.4.1 交叉熵损失

对于分类问题,交叉熵损失是最常用的。公式:

L = -∑ yᵢ · log(pᵢ)

其中yᵢ是真实标签(one-hot编码),pᵢ是模型预测的概率。

为什么用交叉熵而不是均方误差?我举个例子你就明白了。假设真实标签是[1,0,0],模型预测是[0.8,0.1,0.1],交叉熵损失很小;但如果预测是[0.3,0.3,0.4],交叉熵损失就很大。而均方误差对这两种情况的惩罚差异没那么明显。

说白了,交叉熵能更敏感地捕捉到分类错误,梯度也更大,训练更快。

经验之谈:我习惯在分类任务的最后一层用Softmax + 交叉熵损失。Softmax把输出变成概率分布,交叉熵衡量两个分布的差异。这对组合,绝配。

3.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。从感知机到多层感知机,再到激活函数和损失函数,每一步都是环环相扣的。

深度学习入门:神经网络基础 感知机 线性分类器 多层感知机 隐藏层 + 非线性 激活函数 ReLU / Sigmoid / Tanh 损失函数 交叉熵损失 核心流程 输入 → 多层感知机(含激活函数) → 输出 → 计算交叉熵损失 → 反向传播

3.6 本章小结

嗯,到这里咱们把神经网络最基础的东西捋了一遍。感知机是起点,多层感知机是核心,激活函数让网络有了非线性能力,损失函数告诉网络该往哪个方向优化。

我个人觉得,理解这些概念比会调框架重要得多。框架每年都在变,但底层的数学原理几十年没变过。你把这些吃透了,后面学CNN、RNN、Transformer都会轻松很多。

最后说一句:别急着跑代码,先把这些概念在脑子里过一遍。我见过太多人连激活函数的作用都说不清楚,就开始调参了。基础不牢,地动山摇。

可可精品资料库