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做激活,结果训练到中间几层梯度几乎为零,参数根本不动。这就是梯度消失问题。
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问题。
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],交叉熵损失就很大。而均方误差对这两种情况的惩罚差异没那么明显。
说白了,交叉熵能更敏感地捕捉到分类错误,梯度也更大,训练更快。
3.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。从感知机到多层感知机,再到激活函数和损失函数,每一步都是环环相扣的。
3.6 本章小结
嗯,到这里咱们把神经网络最基础的东西捋了一遍。感知机是起点,多层感知机是核心,激活函数让网络有了非线性能力,损失函数告诉网络该往哪个方向优化。
我个人觉得,理解这些概念比会调框架重要得多。框架每年都在变,但底层的数学原理几十年没变过。你把这些吃透了,后面学CNN、RNN、Transformer都会轻松很多。
可可精品资料库