机器学习与神经网络
本章涵盖了机器学习和人工神经网络的基础知识,重点包括神经网络的基本原理、监督学习和无监督学习方法,以及它们在实际参数化设计中的应用。【AI大模型教程】
机器学习的基本概念
机器学习是指通过数据训练模型,使其能够对未见数据进行预测或决策的过程。主要分为以下两类:
-
监督学习
:需要带标签的数据,模型通过学习输入和输出的映射关系。
-
无监督学习
:无需标签,模型通过发现数据中的结构或模式进行学习。
神经网络的生物基础
人工神经网络的设计受到生物神经网络的启发。
CPU速度 ≈ 2 GHz(每秒20亿次操作),受光速和晶体管间距离的限制
而神经元的振荡频率为≈15 Hz 至 60 Hz,
典型的计算机CPU(例如我的笔记本电脑)大约有109个晶体管
而大脑有10的11次方个神经元,总共10的13次方到10的14次方个突触连接
并且大脑神经元可以进行并行计算:神经元通过突触连接实现并行信息处理。
于是可以让计算机模仿大脑的结构来做一些有意思的事情。
我们是如何看到数字的
视网膜中的一个单独的杆状细胞被眼睛中每个发光像素的神经发出的光刺激,这些神经与大脑中的神经元相连,这些神经元被激活放电,大脑的某个位置产生了“3”这个概念。
当一个神经元激活时,它的树突dendrites通过一个网络连接在一起,其末端纤维释放化学物质穿过一个小间隙,这个小间隙被称为突触Synapses。在另一个神经元的树突上,这些化学物质被接收,完成你了信号的传递。
学习和回忆
在生命中的某个时刻,通过看数字“3”,你大脑中的神经元可能已经与其他神经元形成了连接。如果一个神经元从其他神经元那里接收到足够的电信号,它就会再次激活,这样你眼睛里的视杆细胞就会与某种东西相连,产生“3”这个概念。
这只是一个简化的模型
神经元还有有多种功能:
-
抑制其他神经元(inhibit other neurons)
当一个神经元被激活(fire)时,它可以通过抑制旁边或其他神经元的活动,避免它们同时放电,保证信息传递的选择性和精确性。这种机制有助于突出关键的神经信号,减少噪声,提升信号的对比度和清晰度。
-
逻辑运算(perform logical operations)
某些神经元的激活依赖于接收到的输入是否满足特定条件(如接收了神经元A的信号但没有神经元B的信号),这类似于逻辑门运算。神经网络通过这样的方式实现复杂的信息处理和模式识别能力。
-
恢复期(recovery period)
神经元在放电后需要经历一段时间的恢复期,在此期间无论输入如何,它都不会再次激活。这保证了信息的有效传递避免过度激活,有助于维持神经系统的稳定性和节奏,防止持续不间断的放电导致信号混乱。
于是我们可以用同样的原理来构建人工神经网络,进行大规模的并行计算来模拟大脑的神经元过程,记忆输入输出模式,通过大量数据训练学习,并且具有泛化能力。
简单的神经网络模型
1940年代McCulloch-Pitts提出了神经元的基础数学模型,
-
输入(X1, X2, X3)
:表示神经元接收到的输入信号,通常是多个二值(-1,1)或实值信号。
-
权重(w1i, w2i, w3i)
:对应每个输入信号的“强度”或“重要性”,反映信号对输出的影响大小。
-
求和(Σ)
:将所有输入乘以相应权重后加和,得到一个加权总输入。
-
阈值(threshold bias)
:这是一个门槛值,控制神经元是否激活。如果加权总和超过阈值,神经元激活输出yi;否则不激活。也翻译为偏置
-
激活函数(阶跃函数)
:图中用阶跃函数表示,其作用是将加权和转化为二元输出(激活或不激活,1或0)。还有其他的激活函数类型。
公式表达为:
Hebbian learning
如何构建一个简单的拥有记忆能力的神经网络
首先需要明确,计算机的记忆和人类记忆是不同的,因为人类会联想
比如这张图片,人能通过联想,很容易看出来隐藏着的“A”。
再比如,通过这句话:“哪个60年代的四人摇滚乐队以昆虫命名,并引发了British invasion?”
通过上下文Context,我们能够很容易得出”The Beatles“的答案。
那如果用一个简单的神经网络去模拟这个过程呢?
Hebbian提议建立一个人工神经元阵列,全部神经元互相连接,通过神经元激活与否,探讨整个阵列能否记忆一个图案。
结果是NO,因为全部神经元都与彼此连接,只要一个被激活,其余全部都会被激活。
这说明简单的全连接是不能有效记忆的,需要调节权重weight。
我们再来看这个公式:
右图说明连接权重表现为连接的强弱或正负关系。节点a和节点x之间连接强,a和y连接弱或为负。
当a和c同时激活且都与x有强连接时,x也被激活。
这就让权重来决定神经信号是否激活传播。这其实之前形式系统那篇讲的符号主义Symbolism到联结主义Connectionism是一个意思。如果没有权重这个概念,只是简单的激活传递,是没有程度的概念的。
我们人类识别一个物体,并不是在做符号推导,而是在做特征值的累加,比如说这个图案,它在多大程度上像**“A”。“多大程度”可以转化为数值的加减,这也就允许了模糊性推断,即联想**。
Hebb定律
w是权重,是多大程度能激活,它代表着神经元之间的记忆。
Hebbian网络的权重公式可以写为:
Hebb定律核心观点是:
如果两个神经元同时激活,他们之间的突触连接会更强。
换言之,就是xi和xj之间的权重wij会增加。并且wij存储了训练时的xi和xj信息。
通过不同输入不同的图案训练,w是会变化的,这就是神经网络学习和记忆的原理。
那么怎么去唤醒记忆呢
原神经元传递公式:
其中:
- n是神经元总数;
- j 是i前一个位置
- xj 是第 j 个神经元的输入状态(一般取值为±1);
- xi是第 i 个神经元的输入状态;
- yi是第 i 个神经元的当前输出。
- 阈值 bi可合并进权重。
把学习到的w,替换回我们的原公式,阈值是常数,在此可以简化合并到权重内,得到新的关系式:
这里 yj是第 j个神经元的当前状态。
假设我们以初始存储的图案作为输入:
即所有神经元输出等于其之前学习存储的图案。带入更新公式:
注意,因为神经元的状态只有激活与否,xj的值要么为1,要么为-1,所以:
代入原式:
由于神经元的值只有±1,经过sign函数符号保持不变,即:
这说明如果使用的原来学习的图案,也就是上一次的结果yj再次输入给xj,网络是稳定的。
通俗的讲,这是神经网络能够成功储存并准确唤醒记忆的数学证明。
那假设输入的图案有点不一样呢?
而如果输入的图案有变化,即输入 y=(y1,y2,…,yn)并非完全等于记忆 x=(x1,x2,…,xn)
神经元更新公式依然是:
此时yj并非完全等于xj,但是仍可以进行等量代换,所以下式中yj含有噪声或者错误(输入的神经元有若干错误):
对于第 i 个神经元,我们只看sign函数内部的求和内容:
因为xi是由刚才的w代换进来的,本质是上一次训练的结果,在这里是常数,对于求和本身来说:
若yj与xj同号,则xj乘yj 为 1;否则为-1。我们可以将其转化为若干个1和-1的和。
我们设有m个神经元状态与训练时状态不一样,即有m个-1,则:
代回原式:
因为Sign函数的输出结果只为1或者-1,所以yi的结果只与S的正负有关系,与n数量无关。所以
如果S > 0,则:
收敛条件:
也就是说,只要输入错误的神经元少于神经元输入总数的一半,该模型依然能输出正确的信号。
这是神经元模型容错率的数学证明,也是模型能够泛化应用的基础。
当有多个图案Pattern:
对于p个图案的训练存储,权重w:
神经网络的基础知识
高维空间和向量
在笛卡尔坐标系中,利用投影和尺规作图来描述曲线和几何形状。复杂的三维形体,可以被投影到二维平面上。这是基于我们能直接感知到的三维空间,那么更高维度的空间,怎么描述呢?
在描述高维空间之前,一个在三维空间中的点,怎么描述呢?
我们可以将其描述为在笛卡尔坐标系中x,y,z的坐标值,写成向量(x,y,z)
在计算机科学中,向量Vector的概念和列表List的概念几乎是一样的。
因此这个三维向量可以表示为一组长度为3的数据。
那如果是两个点呢?
我当然可以描述为v1(x1, y1, z1), v2(x2, y2, z2),这样三维空间内的两个向量。
但是同样也可以将其描述为 v3(x, y, z, a, b, c)这样的一个六维空间的一个向量。
我们将两个点和其对应的坐标系一起看做一整个系统,每个点在其各自坐标系内每个维度的坐标都可以看做这个更大的系统的一个维度。因此这个系统的状态可以用这个六维空间来表示。两个点的位置可以用一个六维向量,也就是一个长度为6的列表来表示。
还是那句话,系统的状态取决于观察层级。
降维dimensionality reduction
处理高维数据集的方法
降维的目标:找到数据变化最大的方向
图片展示了二维数据点的分布,数据点沿某个方向变化最大,是一条一维直线。
降维的核心就是找出数据中方差(变化)最大的方向,用这个方向(或者前几个主要方向)来描述数据,忽略方差较小、信息量少的方向,达到数据压缩和简化的目的。
特征值和特征向量(eigenvalues and eigenvectors)
对于数据用的协方差矩阵 A,特征向量 φ 定义为满足:
其中:
- λ是特征值,表示该方向上的方差大小;
- φ 是对应的特征向量,表示数据主方向(维度)。
- 通过计算所有特征值和特征向量,我们可以知道数据在哪些方向上变化最大。
向量点积dot product与数据投影projection
向量点积公式:
数据点 p 投影到新轴 φ 上:
这表示将多维数据点在主方向上的投影,表示该数据点在降维后空间中的坐标。
原本在二维空间的大量数据点通过投影,可以保留最重要的部分。
常用算法:PCA降维算法
简化版伪代码:
输入矩阵 P 是数据点集合(样本数 × 特征维度)。 计算协方差矩阵C。 计算 C 的特征值和特征向量。 排序后选取前三个特征向量(即方差最大的三个方向)。 将所有原数据点投影到这三个特征向量上,实现降维到3维。
总结:
降维就是寻找数据主要变化方向,减少维度的同时尽量保留信息。
利用特征值/特征向量表示数据的主轴,通过向量投影实现空间映射。
无监督学习
无监督学习的目标是发现数据中的隐藏结构或模式。
没有正确与否的答案,由计算机自己完成这个任务。
Hebbian学习
前文提到的Hebbian学习就是一种通过强化同时激活的神经元之间的连接来实现的学习规则。
基本思想是细胞一起放电,它们的连接就会更强——即用进废退。
输入和输出是同一组神经元,通过强化同时激活的神经元之间的连接,实现记忆和模式识别。
Kohonen网络
Kohonen网络是一种竞争性自组织映射(SOM)算法,用于降维和聚类。
竞争性学习:输入和输出是同一组神经元,神经元和同组竞争,获胜神经元及其邻居加强连接。
竞争学习的灵感来自海马体(hippocampus),海马体是大脑中负责空间导航的重要区域。图片展示了海马体的解剖结构,其实际是将三维空间映射到一个“卷起来”的二维表面上的方式。
人工神经网络模拟海马体,把输入空间映射到具有更少神经元的“二维平面”,这称为自组织映射(Self-Organizing Maps,SOMs)。
人工海马体模型结构
使用两层神经元:
- 输入层:代表真实世界的多样输入(大量神经元)。
- Kohonen层(人工海马体):神经元更少,是映射后的低维空间。
输入层到Kohonen层全连接,初始权重随机。每次输入一组神经元激活信号,Kohonen层接收信号最大的神经元赢得这次激活,称为winner。
由于初始的权重是随机的,winner也是随机的。
winner与其邻居神经元的权重加强,而其他权重减弱,强化输入pattern与winner 的联系。
经多次迭代学习后,输入空间中相似的输入映射到Kohonen层相邻区域,形成了对应关系和映射图。
Kohonen层的神经元位置可能与输入层不同,且两者维度不一定相同。
类比海马体感知三维空间,可以实现空间信息的降维和可视化。
邻域函数和权重调整方法
以下不同的加权函数可以控制winner和邻居连接权重的强化程度。
常用有普通的线性强化,带有负强化区域的墨西哥帽型,可以保证网络的稳定性和明确性。
第二行展示的是学习过程中,邻域判定半径会逐渐减小,使得映射更加精细。
应用场景:
SOM可以用于智能体模拟决策,如超市购物问题supermarket shoppers;
降维和映射方法也能帮助解决旅行商问题travelling salesman等。
监督学习
监督学习的目标是通过标签数据训练模型,使其能够对新输入进行分类或回归。
感知机(Perceptron)
感知机是最简单的监督学习模型,用于二分类问题,根据输入信号分辨两种类别。
输入一个图像(如数字3),经过编码转换成一组输入信号,感知机根据训练学习的权重给出分类输出
基础的神经元模型依然是McCulloch-Pitts:
可以把偏置 b 并入权重中,令 w0 = −b,令输入向量增添一个固定值,简化公式为:
权重w和输入x都可以看作空间中的向量,这将神经元模型转换成了权重w和输入x的向量内积,几何上代表输入向量和权重向量的投影关系。
感知机的几何意义
如图所示是二维空间,将输入点表述为坐标,每一点的坐标为输入向量的值,比如 (x1,x2) 表示一个输入的特征组合,任意输入都对应二维空间中的一个点。因为输入只有神经元的激活与未激活,即(-1,1),在只有两个输入特征x的情况下,输入可以对应到二维空间上的这四个点。
输入向量 x 可视为多维空间中的一个点,权重向量 w 定义了一个超平面hyperplane(分类边界)
其方程为:
其中 w是法向量,w0和w绝对值的比值 是超平面到原点的距离。
超平面在二维即为直线,三维即为平面,更高维为超平面
超平面将输入空间分为两个区域:
输入的点可以被超平面判定到两侧。
通过调整权重和偏置,超平面斜率和位置变化,分类结果随之改变
n个输入向量对应n维空间:
那么如何设置权重呢?
这是一个监督学习过程,根据监督的标签数据不断调整
如果点被正确分类,权重保持不变;如果被错误分类,就按照误差来旋转超平面。错误越大,旋转的幅度越大,直到能够正确分类。
再来简单回顾一下向量的基本运算:
点积(dot product)是标量运算,表示两个向量的相似度
向量加法,则是合成新向量
于是我们通过输入向量x和权重向量w(即超平面法向量)的点积,定义误差 J
*然后根据误差调整权重向量,*η 是学习率,这个过程不断进行,不断优化分类器:
感知机算法伪代码
输入样本集 (x_j,y_j),给定初始权重 w。 对每个样本点利用当前权重进行分类。 若分类错误,按规则更新权重。 逐轮迭代直到误差收敛或达到最大次数。
然而感知机有个致命缺陷
单层感知机只能解决线性可分的问题,对于 XOR(异或) 这样的非线性问题无法解决。
XOR就是输入两个值,符号相同时激活,符号不同时不激活。对应激活点坐标就是(1,1)、(-1,-1)。
而感知机所划分的这条直线不可能将激活的点和未激活的点划分开。
现有的感知机后面,多加一层,或者多层感知机。使其能够解决非线性问题。
这就是多层感知机
多层感知机(Multi-Layer Perceptron)
通过引入隐藏层,网络可以在隐藏层中学习数据的高级特征,解决非线性问题。
每一层都在对数据进行更高级的抽象。例如图像的边缘、纹理、形状等特征可以通过多层神经网络逐步提取。
MLP的三层结构
-
输入层
:接收原始数据(如图像像素、特征向量)。
-
隐藏层
:对输入数据进行非线性变换,提取高级特征。
-
输出层
:生成最终的预测结果(如分类标签或回归值)。
隐藏层神经元可以使用非线性激活函数,将低级特征组合成复杂的高级特征。
比如Sigmoid函数,可以大大扩展模型的能力:
隐藏层的数量可以不止一个,可以有多个,形成深度神经网络(DNN)。
而每层的神经元数量可以根据任务类型需求调整。
训练过程与反向传播
与简单的感知机一样,首先随机化权重,然后运行神经网络数据从输入层通过隐藏层传递到输出层,计算每一层的输出。
通过计算损失函数的梯度,相应地更新输出层的权重,这将加强有助于正确输出的连接,削弱那些导致误差的连接。
简单说就是估计上一层神经元对当前层神经元激活成功做出的贡献,然后相应地加强或者削弱权重。
这一部分内容是多层感知机的核心,是机器能够学习的原理,太过于重要,具体过程和原理准备放在另一篇关于实操的文章里面讲。
一个黑箱
在网络内部发生了什么?
网络的每一层实际上都将前一层的输出映射到一个不同的维度空间。
这里的隐藏层定义了一个比输入层更高维度的空间。
将输入映射到高维空间后,原本在输入层不可线性区分的数据点,可以在隐藏层变得线性可分。
这便解释了为什么通过多层结构加非线性激活函数,能够解决单层感知机无法解决的非线性问题,如XOR问题。
这个过程是隐式的,能否有显式的方法呢,使得过程更有可解释性
支持向量机(Support Vector Machine)
支持向量机是一种强大的监督学习模型,特别适用于高维数据。
通过将输入的原始特征做非线性组合(平方、乘积),将数据转到一个高维空间。
比如可以将二维输入空间 x=[x1,x2]
显式映射到三维特征空间 φ=[φ1(x),φ2(x),φ3(x)]
映射函数为:
这种映射可以让某些原本非线性可分的数据在新空间线性可分。
将XOR问题的二维空间映射到六维空间:
映射到六维空间后数据结构变得简单,可以利用线性超平面划分数据。
这是“升维降难”的核心思想,即在更高维空间中更容易解决复杂非线性问题
Maximum Margin
SVM在边界附近的“支持向量”点上训练,最大化间隔(margin)以获得最佳分类器。
显示分类结果在二维输入空间中是非线性的边界。
分类和回归
(内容来自LeetCode 机器学习101)
任何机器学习模型都可以看作一个函数F。
通常我们会根据输出值的类型将机器学习模型进一步划分为分类(classification)和回归(regression)。
如果机器学习模型的输出是离散值(discrete values),例如布尔值,那么我们将其称为分类模型。如果输出是连续值(continuous values),那么我们将其称为回归模型。
分类模型
例如,说明照片中是否包含猫的模型可以被视为分类模型,因为我们可以用布尔值表示输出。
更具体地说,输入可以表示为矩阵 𝑀,尺寸为 𝐻×𝑊,其中 𝐻是照片的高度(像素),𝑊 是照片的宽度。矩阵中的每个元素都是照片中每个像素的灰度值,即一个介于 [0,255] 之间的整数,表示颜色的强度。模型的预期输出为二进制值 [1∣0],用于指示照片是否显示猫。综上所述,我们的猫照片识别模型 𝐹 可表述如下:
机器学习的目标是找出一个尽可能通用的函数,这个函数要尽可能对不可见数据给出正确的答案。
回归模型
对于回归模型,我们给出这样一个例子,考虑一个用于估算房产价格的模型,其特征包括诸如面积、房产类型(例如住宅、公寓),当然还有地理位置。在这种情况下,我们可以将预期输出看作是一个实数 𝑝∈𝑅,因此它是一个回归模型。注意,在本例中,我们所拥有的原始数据并非全部是数字,其中某些数据是用于分类的,例如房地产类型。在现实世界中,情况往往就是这样的。对于每个正在考虑的房产,我们可以将其特征用元组 𝑇 来表示,其中元组中的每个元素要么是数值,要么是表示其属性之一的分类值。在许多情况下,这些元素也被称为 “特征(features)”。综上所述,我们可以建立如下的房产价格估算模型:
再具体一些,让我们考虑一个具有以下特征的房产:
现在考虑到上述特征,如果我们的模型 F 给出了一个像10,000$ 这样的值,那么很可能我们的模型并不适合这个问题。
在下面的图表中,我们展示了一个以地产面积为唯一变量,以地产价格为输出的回归模型样例。
说起特征,还要提到的一点是,一些机器学习模型(例如决策树)可以直接处理非数字特征,而更多时候人们必须以某种方式将这些非数字特征转换(transform)为数字特征。
问题转化
对于一个现实世界的问题,有时人们可以很容易地将其表述出来,并快速地将其归结为一个分类问题或回归问题。然而,有时这两个模型之间的边界并不清晰,人们可以将分类问题转化为回归问题,反之亦然。
在上述房产价格估算的例子中,似乎很难预测房产的确切价格。然而,如果我们将问题重新表述为预测房产的价格范围,而不是单一的价格标签,那么我们可以期望获得一个更健壮的模型。因此,我们应该将问题转化为分类问题,而不是回归问题。
对于我们的猫照片识别模型,我们也可以将其从分类问题转换为回归问题。我们可以定义一个模型来给出一个介于 [0,100%]之间概率值来判断照片中是否有猫,而不是给出一个二进制值作为输出。这样,就可以比较两个模型之间的细微差别,并进一步调整模型。例如,对于有猫的照片,模型 A 给出概率为 1%,而模型 B 对相同照片给出了49% 的概率。虽然这两种模型都没有给出正确的答案,但我们可以看出,模型 B 更接近于事实。在这种情况下,人们经常应用一种称为逻辑回归(Logistic Regression)的机器学习模型,这种模型将连续概率值作为输出,但用于解决分类问题。