机器学习网课笔记
开始
推荐
零基础学习目标:
1.成本函数,损失函数
2.梯度下降
3.学习率
4.向量化
5.特征缩放
6.过拟合
7.神经元、神经网络
8.激活函数
无监督学习
数据仅包括输入x,无标签
[[聚类]]:
相似的数据放在一起
异常检测
[[降维]]:
将训练数据中的样本从高维空间转换到
低维空间
[[半监督学习]]
监督学习
使用输入特征x和输出目标(标签y)进行训练,当接受一个全新的的输入时,会尝试给出答案
回归(连续型)
预测数字: eg:房价
![[Pasted image 20260104165912.png]]
回归模型:
f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b(x)=wx+b
代价函数
衡量模型整体预测值与真实值之间的误差
损失函数针对单个样本
常用方法:
均方误差: J ( w , b ) = 1 2 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) 2 均方误差:J(w, b) = \frac{1}{2m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)})^2 均方误差:J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2
- w : 权重(weight)
- b : 偏置(bias)
- x : 输入特征
- m:输入数据点的数量
- f_{w,b}(x) : 预测输出
- y(i):真实输出
目标:找到代价最小的参数w,b
方法:使用算法,自动寻找最小代价 即梯度下降
权重初始化
1.随机初始化
- 均匀分布:权重从区间 [-a, a] 中随机采样,其中 a 是超参数(通常取较小值,如 0.01)
- 正态分布:权重从均值为 0、方差为 (
) 的正态分布中采样,(
) 通常取 0.01
2. He 初始化
针对 ReLU 及其变种(如 Leaky ReLU)设计
仅考虑输入神经元数量
3.常数初始化
将权重初始化为固定常数(如 0 或 1),但实际中很少单独使用。
-
全零初始化会导致 “对称权重问题”:所有神经元学习到相同的特征,网络等效于单个神经元,失去表达能力。
-
通常仅用于偏置项(bias)初始化(如偏置初始化为 0)
[[梯度]]下降
按照梯度方向达到局部最小值,梯度的数量级与输入的数量级直接相关
重复算法更新参数,直到参数收敛于一个固定值
算法:
t m p _ w = w − α ∂ ∂ w J ( w , b ) t m p _ b = b − α ∂ ∂ b J ( w , b ) w = t m p _ w b = t m p _ b \begin{aligned} tmp\_w &= w - \alpha \frac{\partial}{\partial w} J(w, b) \\ tmp\_b &= b - \alpha \frac{\partial}{\partial b} J(w, b) \\ w &= tmp\_w \\ b &= tmp\_b \end{aligned} tmp_wtmp_bwb=w−α∂w∂J(w,b)=b−α∂b∂J(w,b)=tmp_w=tmp_b
w和b同步更新,注意更新值的顺序
α : 学习率,控制下降时的步长 \alpha :学习率,控制下降时的步长 α:学习率,控制下降时的步长
∂ ∂ w J ( w , b ) \frac{\partial}{\partial w} J(w, b) ∂w∂J(w,b)
是梯度,注意方向朝向负值方向
带值计算为
∂ ∂ w J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) x ( i ) ∂ ∂ b J ( w , b ) = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) \begin{aligned} \frac{\partial}{\partial w} J(w, b) &= \frac{1}{m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)}) x^{(i)} \\ \frac{\partial}{\partial b} J(w, b) &= \frac{1}{m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)}) \end{aligned} ∂w∂J(w,b)∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))x(i)=m1i=1∑m(fw,b(x(i))−y(i))
如何确定学习率α:保证代价在每次迭代时都减小
- 太小,步长小,花费更大
- 太大,持续震荡,无法收敛
梯度爆炸:梯度的数值非常极端
- 数据标准化
- 梯度裁剪:给梯度设置上限,保证每一步可控
多特征线性回归
f w ⃗ , b ( x ⃗ ) = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b f_{\vec{w}, b}(\vec{x}) = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b fw,b(x)=w1x1+w2x2+⋯+wnxn+b 其中:
- w ⃗ = [ w 1 , w 2 , w 3 , … , w n ] \vec{w} = [w_1, w_2, w_3, \ldots, w_n] w=[w1,w2,w3,…,wn] 是权重向量(model parameters)
- b b b 是偏置项(bias),是一个标量
- x ⃗ = [ x 1 , x 2 , x 3 , … , x n ] \vec{x} = [x_1, x_2, x_3, \ldots, x_n] x=[x1,x2,x3,…,xn] 是输入特征向量(input vector)
可以简洁地写成点积形式: f w ⃗ , b ( x ⃗ ) = w ⃗ ⊤ x ⃗ + b f_{\vec{w}, b}(\vec{x}) = \vec{w}^\top \vec{x} + b fw,b(x)=w⊤x+b 其中 w ⃗ ⊤ x ⃗ \vec{w}^\top \vec{x} w⊤x 表示向量 w ⃗ \vec{w} w 与 x ⃗ \vec{x} x 的内积(点乘)。
向量化
f w ⃗ , b ( x ⃗ ) = w ⃗ ⊤ x ⃗ + b f_{\vec{w}, b}(\vec{x}) = \vec{w}^\top \vec{x} + b fw,b(x)=w⊤x+b
w= np.array([1.0,2.5,-3.3])
b=4
x=np.array([10,20,30])
f=np.dot(w,x)+b //使用NumPy库函数进行向量之间的点积,利用并行处理元件
多特征线性回归梯度下降
方法一:迭代梯度下降
假设模型为: f w ⃗ , b ( x ⃗ ) = w ⃗ ⊤ x ⃗ + b f_{\vec{w}, b}(\vec{x}) = \vec{w}^\top \vec{x} + b fw,b(x)=w⊤x+b 损失函数(均方误差): J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 J(\vec{w}, b) = \frac{1}{2m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2 梯度计算
- 对每个参数求偏导: 对第 j 个权重 w_j :
∂ ∂ w j J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial w_j} J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_j^{(i)} ∂wj∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))xj(i) - 对偏置 b : ∂ ∂ b J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \frac{\partial}{\partial b} J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) ∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i)) 参数更新(同步更新) 在每次迭代中,所有参数同时更新: w 1 = w 1 − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x 1 ( i ) ⋮ w n = w n − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x n ( i ) b = b − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \begin{aligned} w_1 &= w_1 - \alpha \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_1^{(i)} \\ &\vdots \\ w_n &= w_n - \alpha \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_n^{(i)} \\ b &= b - \alpha \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) \end{aligned} w1wnb=w1−αm1i=1∑m(fw,b(x(i))−y(i))x1(i)⋮=wn−αm1i=1∑m(fw,b(x(i))−y(i))xn(i)=b−αm1i=1∑m(fw,b(x(i))−y(i)) 💡 所有更新是 同时进行 可以简写为向量形式: w ⃗ = w ⃗ − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x ⃗ ( i ) \vec{w} = \vec{w} - \alpha \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) \vec{x}^{(i)} w=w−αm1i=1∑m(fw,b(x(i))−y(i))x(i) b = b − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) b = b - \alpha \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) b=b−αm1i=1∑m(fw,b(x(i))−y(i))
方法二:正规方程
仅适用于线性回归,无需迭代梯度
[[Ada Boosting]]
弱分类学习过程中,如何改变数据权重?
提高上一轮中分类错误样本权重
如何将一系列弱分类器组合成强分类器?
将分类误差小的弱分类器权重加大,让其成主要作用
特征缩放
使梯度下降更快
当有不同特征取值范围差异很大时,下降速度太慢,为此需要对特征进行缩放,使其在合理的范围
方法:
- 除以最大值: x/max
- 均值归一化: 使其通常在-1到1之间,将数据限定在某个特定区间
[[归一化(标准化)]]:
- 先找到特征x1的平均值u1
- x1=(x1-u1)/(max-min)
- Z-分数归一化(正态分布标准化):计算每个特征的标准差,更关注数据在其自身分布中的相对位置
检验梯度下降是否收敛:找到最小值(J的代价减少量小于一个ε)
正常收敛:
- 学习曲线:
![[Pasted image 20260107010139.png]]
纵轴:代价值
横轴:训练迭代次数
批量归一化BN
BN 在每个训练批次中,对每个特征维度,独立地计算均值和方差,并用它们来重新归一化该特征。BN 的一个巨大优势在于它对预处理中的瑕疵具有极强的鲁棒性。即使输入数据没有被完美地归一化,BN 也会在第一层之后“纠正”它,因为它本质上就是重新做了一遍标准化。
多项式回归
使用多项式函数,但要考虑特征缩放
分类(离散型):
预测类型: eg:癌症恶性和良性
二值分类
Sigmoid函数: g ( z ) = 1 1 + e − z 其中 0 < g ( z ) < 1 g(z) = \frac{1}{1 + e^{-z}} \quad \text{其中} \quad 0 < g(z) < 1 g(z)=1+e−z1其中0<g(z)<1
![[Pasted image 20260108155008.png]]
[[逻辑回归模型]]
将线性模型与 Sigmoid 函数结合,用于二分类任务
- 线性部分 z = w ⃗ ⋅ x ⃗ + b z = \vec{w} \cdot \vec{x} + b z=w⋅x+b 其中:
- w ⃗ \vec{w} w:权重向量
- x ⃗ \vec{x} x:输入特征向量
- b b b:偏置项
- z z z:线性组合结果
- Sigmoid 激活函数 g ( z ) = 1 1 + e − z g(z) = \frac{1}{1 + e^{-z}} g(z)=1+e−z1 将 z 映射到 (0, 1) 区间,表示预测为正类的概率。
- 完整模型 f w ⃗ , b ( x ⃗ ) = g ( w ⃗ ⋅ x ⃗ + b ) = 1 1 + e − ( w ⃗ ⋅ x ⃗ + b ) f_{\vec{w}, b}(\vec{x}) = g(\vec{w} \cdot \vec{x} + b) = \frac{1}{1 + e^{-(\vec{w} \cdot \vec{x} + b)}} fw,b(x)=g(w⋅x+b)=1+e−(w⋅x+b)1 > 表示样本属于正类的概率。
- 输出解释
[!note]
此处 f w ⃗ , b ( x ⃗ ) 不是回归的函数,而是新的模型输出函数 此处 f_{\vec{w}, b}(\vec{x})不是回归的函数,而是新的模型 输出函数 此处fw,b(x)不是回归的函数,而是新的模型输出函数
决策边界
z = w ⃗ ⋅ x ⃗ + b = 0 z = \vec{w} \cdot \vec{x} + b =0 z=w⋅x+b=0
此时 g(z)=0.5
得到的曲线即为预测值0和1的边界
逻辑回归的[[损失函数]]
对于单个样本 ( x(i), y(i) )
其损失函数定义为: L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = { − log ( f w ⃗ , b ( x ⃗ ( i ) ) ) if y ( i ) = 1 − log ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) if y ( i ) = 0 L(f_{\vec{w}, b}(\vec{x}^{(i)}), y^{(i)}) = \begin{cases} -\log\left(f_{\vec{w}, b}(\vec{x}^{(i)})\right) & \text{if } y^{(i)} = 1 \\ -\log\left(1 - f_{\vec{w}, b}(\vec{x}^{(i)})\right) & \text{if } y^{(i)} = 0 \end{cases} L(fw,b(x(i)),y(i))={−log(fw,b(x(i)))−log(1−fw,b(x(i)))if y(i)=1if y(i)=0 其中:fw,b(xi)是预测概率
yi是真实标签值,范围0到1
代价函数则为所有样本的损失函数相加,衡量整个数据集
总成本函数: 利用最大似然估计可得: J ( w ⃗ , b ) = 1 m ∑ i = 1 m L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) 利用最大似然估计可得:J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} L(f_{\vec{w}, b}(\vec{x}^{(i)}), y^{(i)}) 利用最大似然估计可得:J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))
同样,梯度下降所得:
重复进行{
}
[[过拟合]](高方差)
![[Pasted image 20260108172248.png]]
很好适应训练集但却对验证集效果不好
会把训练数据偶然和无关的细节(噪声)也会接受
[!info]
模型过于执着地拟合训练数据中的每一个细节,包括其中的噪声和偶然性,而失去了对数据背后普适规律的把握
解决过拟合
- 更多的数据集
- 选择最小特征集,减少特征数量(易丢失信息)
- 正则化:鼓励学习算法缩小参数值,而不一定要求精确到0
一般只正则化wi-wn,而没有b
[[正则化]]
惩罚所有的特征
最常见的形式是 L2 正则化
-
带正则化的成本函数 min w ⃗ , b J ( w ⃗ , b ) = min w ⃗ , b [ 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 ⏟ 均方误差 + λ 2 m ∑ j = 1 n w j 2 ⏟ 正则化项 ] \min_{\vec{w}, b} J(\vec{w}, b) = \min_{\vec{w}, b} \left[\underbrace{\frac{1}{2m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)})^2}_{\text{均方误差}} + \underbrace{\frac{\lambda}{2m} \sum_{j=1}^{n} w_j^2}_{\text{正则化项}} \right] w,bminJ(w,b)=w,bmin 均方误差 2m1i=1∑m(fw,b(x(i))−y(i))2+正则化项 2mλj=1∑nwj2 其中:
f w ⃗ , b ( x ⃗ ( i ) ) = w ⃗ ⊤ x ⃗ ( i ) + b − − − − 模型预测值 f_{\vec{w}, b}(\vec{x}^{(i)}) = \vec{w}^\top \vec{x}^{(i)} + b ----模型预测值 fw,b(x(i))=w⊤x(i)+b−−−−模型预测值
y ( i ) :真实标签 y^{(i)} :真实标签 y(i):真实标签
m :样本数量 m :样本数量 m:样本数量
n :特征数量 n :特征数量 n:特征数量
λ :正则化系数(控制正则化强度) \lambda :正则化系数(控制正则化强度) λ:正则化系数(控制正则化强度)
第一项:均方误差( M S E ),衡量拟合效果 第一项:均方误差(MSE),衡量拟合效果 第一项:均方误差(MSE),衡量拟合效果
第二项: L 2 正则化项,惩罚权重的平方和 第二项:L2 正则化项,惩罚权重的平方和 第二项:L2正则化项,惩罚权重的平方和
尽力最小化代价函数 -
正则化的作用
防止模型过度依赖某些特征(即“过拟合”)
使权重趋于较小值,提升泛化能力
当 λ = 0 时,退化为普通最小二乘回归
当 λ 过大,对应特征将非常小,会欠拟合
L1正则化:惩罚权重绝对值之和,将其集中在少数几个特征上,其他大量的平庸特征权重消为0,使权重稀疏
L2正则化:惩罚任何一个权重变得过大,使权重平滑
正则化的线性回归
带正则化的梯度下降
在引入 L2 正则化后,成本函数为: J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n w j 2 J(\vec{w}, b) = \frac{1}{2m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} w_j^2 J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2+2mλj=1∑nwj2 梯度计算
对第 j 个权重 w_j :
∂ ∂ w j J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) + λ m w j \frac{\partial}{\partial w_j} J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_j^{(i)} + \frac{\lambda}{m} w_j ∂wj∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))xj(i)+mλwj
对偏置 b : ∂ ∂ b J ( w ⃗ , b ) = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \frac{\partial}{\partial b} J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) ∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i)) > 注意:偏置 b 不参与正则化,因此其梯度中没有额外项。
在每次迭代中,所有参数同时更新: w j = w j − α [ 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) + λ m w j ] = w j ( 1 − α λ m ) − α m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) \begin{aligned} w_j &= w_j - \alpha \left[ \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_j^{(i)} + \frac{\lambda}{m} w_j \right] \\ &= w_j \left(1 - \frac{\alpha \lambda}{m}\right) - \frac{\alpha}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) x_j^{(i)} \end{aligned} wj=wj−α[m1i=1∑m(fw,b(x(i))−y(i))xj(i)+mλwj]=wj(1−mαλ)−mαi=1∑m(fw,b(x(i))−y(i))xj(i) b = b − α [ 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) ] b = b - \alpha \left[ \frac{1}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) \right] b=b−α[m1i=1∑m(fw,b(x(i))−y(i))] > 📌 更新是 同时进行 的(simultaneous update),即使用上一轮的值计算新值。 w ⃗ = w ⃗ ( 1 − α λ m ) − α m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x ⃗ ( i ) \vec{w} = \vec{w} \left(1 - \frac{\alpha \lambda}{m}\right) - \frac{\alpha}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) \vec{x}^{(i)} w=w(1−mαλ)−mαi=1∑m(fw,b(x(i))−y(i))x(i) b = b − α m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) b = b - \frac{\alpha}{m} \sum_{i=1}^{m} (f_{\vec{w}, b}(\vec{x}^{(i)}) - y^{(i)}) b=b−mαi=1∑m(fw,b(x(i))−y(i))
正则化的逻辑回归
添加正则项:
J ( w ⃗ , b ) = 1 m ∑ i = 1 m L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) + λ 2 m ∑ j = 1 n w j 2 J(\vec{w}, b) = \frac{1}{m} \sum_{i=1}^{m} L(f_{\vec{w}, b}(\vec{x}^{(i)}), y^{(i)})+ \frac{\lambda}{2m} \sum_{j=1}^{n} w_j^2 J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))+2mλj=1∑nwj2
深度学习
通过逐层、非线性的特征变换,网络将原始的、复杂的、通常非线性可分的数据,逐步转换到一个高维的、抽象的特征空间。在这个空间里,数据不仅是线性可分的,而且是以一个巨大的间隔分开
[[神经网络]]
输入层->中间隐藏层->输出层
每一层输入向量并应用一些逻辑回归单元,计算出另一个向量作为下一层的输入,重复直到最终输出层的计算
![[Pasted image 20260120192121.png]]
[[前向传播]]
对于一个输入张量 x,依次通过神经网络的每一层(每层执行线性变换 + 非线性激活),最终得到输出 y 的过程
一维数组:x=np.array([200,17])
二维数组:x=np.array([[200,17],[312,15]])
[[模型训练]]
- 逻辑回归线性预测为W点积X加上b的sigmoid函数
z=np.dot(w,x)+bf_x=1/(1+np.exp(-z))
指定逻辑回归的输入到输出函数
模型框架model= Sequential([Dense(...),Dense(...),Dense(...),Dense(...),Dense(...)]) - 指定损失函数和成本函数
loss=-y*np.log(f_x)-(1-y)*np.(1/f_x)衡量单个训练样本x,y上的表现
所有m个训练样本上损失函数的平均值
模型框架model.compile(loss=BinaryCrossentropy()) - 使用梯度下降来最小化成本函数
w=w-α*dj_dwb=b-α*dj_db
模型框架model.fit(X,y,epochs=100)
具体化:
![[Pasted image 20260120223639.png]]
#第一步
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([
Dense(units=25, activation='sigmoid'),
Dense(units=15, activation='sigmoid'),
Dense(units=1, activation='sigmoid')
])
#第二步
model.compile(loss.BinaryCrossentropy())
#第三步
model.fit(X,y,epochs=100)
[[激活函数]]
[[ReLu激活函数]]
g ( z ) = m a x [ 0 , z ] g(z)=max[{0,z}] g(z)=max[0,z]
选择激活函数
- 处理二分类:Sigmoid函数
会产生梯度消失现象。而且该激活函数是以 0.5 为中心的 - 预测值有负:线性激活函数
- 预测值恒正:ReLu激活函数
部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。
对于中间隐藏层,一般使用ReLu
非线性结构指全连接层(wx+b)+激活函数
多分类问题
[[softmax]]回归算法
假有 4 个类别:y = 1, 2, 3, 4 对于输入特征向量 x ,每个类别的得分(logits)由线性变换计算得到: z 1 = w ⃗ 1 ⋅ x ⃗ + b 1 z 2 = w ⃗ 2 ⋅ x ⃗ + b 2 z 3 = w ⃗ 3 ⋅ x ⃗ + b 3 z 4 = w ⃗ 4 ⋅ x ⃗ + b 4 \begin{aligned} z_1 &= \vec{w}_1 \cdot \vec{x} + b_1 \\ z_2 &= \vec{w}_2 \cdot \vec{x} + b_2 \\ z_3 &= \vec{w}_3 \cdot \vec{x} + b_3 \\ z_4 &= \vec{w}_4 \cdot \vec{x} + b_4 \\ \end{aligned} z1z2z3z4=w1⋅x+b1=w2⋅x+b2=w3⋅x+b3=w4⋅x+b4 其中:
- w_i 是第 i 类的权重向量
- b_i 是偏置项
- z_i 是第 i 类的未归一化得分(logit) 然后通过 Softmax 函数 将这些得分转换为概率分布
a i = e z i ∑ j = 1 4 e z j = P ( y = i ∣ x ⃗ ) a_i = \frac{e^{z_i}}{\sum_{j=1}^{4} e^{z_j}} = P(y = i \mid \vec{x}) ai=∑j=14ezjezi=P(y=i∣x)
具体展开如下: a 1 = e z 1 e z 1 + e z 2 + e z 3 + e z 4 = P ( y = 1 ∣ x ⃗ ) a 2 = e z 2 e z 1 + e z 2 + e z 3 + e z 4 a 3 = e z 3 e z 1 + e z 2 + e z 3 + e z 4 a 4 = e z 4 e z 1 + e z 2 + e z 3 + e z 4 \begin{aligned} a_1 &= \frac{e^{z_1}}{e^{z_1} + e^{z_2} + e^{z_3} + e^{z_4}} = P(y = 1 \mid \vec{x}) \\ a_2 &= \frac{e^{z_2}}{e^{z_1} + e^{z_2} + e^{z_3} + e^{z_4}} \\ a_3 &= \frac{e^{z_3}}{e^{z_1} + e^{z_2} + e^{z_3} + e^{z_4}} \\ a_4 &= \frac{e^{z_4}}{e^{z_1} + e^{z_2} + e^{z_3} + e^{z_4}} \\ \end{aligned} a1a2a3a4=ez1+ez2+ez3+ez4ez1=P(y=1∣x)=ez1+ez2+ez3+ez4ez2=ez1+ez2+ez3+ez4ez3=ez1+ez2+ez3+ez4ez4每个 a_i 表示输入x属于类别 i 的概率
- 所有 a_i 的和为 1
- Softmax 常用于多分类任务的输出层,配合交叉熵损失函数使用
[[交叉熵损失函数(Cross-Entropy Loss)]]
真实标签对应的预测概率的负对数
loss = − log a j 其中 j = y \text{loss} = -\log a_j \quad \text{其中 } j = y loss=−logaj其中 j=y
![[Pasted image 20260122210855.png]]
关键结论:
- 当模型对正确类别的预测概率越高,损失越小。
- 当模型完全错误(如 a_j to 0 ),损失趋于无穷大,惩罚强烈。
强化学习
-
基于评估:强化学习利用环境评估当前策略,以此为依据进行优化
-
交互性:强化学习的数据在与环境的交互中产生
-
序列决策过程:智能体在与环境的交互中需要作出一系列的决策,这些决策往往是前后关联的
![[Pasted image 20260322153654.png]]
基础
[[数据集]]
训练集
模型学习的教材,通过观察这些来调整内部参数
验证集
“裁判”
告诉不同的架构,参数在未见过的数据上表现最好
测试集
最终测试,整个模型训练和调优过程中都未接触该数据
- 防止模型随机表现恰好符合验证集,具有选择偏误
必须先划分数据集以保证测试集未被接触
切分数据集
1.避免数据泄露,其划分要三种完全不同结构的数据
- 利用交叉验证:评估一个建模流程的性能,非最终模型
- 利用消融实验,可以处理数据泄露
2.两个数据集特征不同,即协变量偏移 - 使用对抗验证
编码分类变量
防止类别的标签为数字而导致假线性关系,使用独热编码
eg:
- A549: (100)
- HeLa: (010)
- MCF7: (001)
仍有多重线性问题
可学习嵌入
为每个类别关联一个低维度的、稠密的向量。这些向量的内容不是我们预先设定的,而是由模型在训练过程中自己学习得到的。
[[目标检测]]
识别图像中有什么+定位
存在大量的冗余检测结果的混乱导致出现假阳性,使得精准率降低
- 使用非极大值抑制NMS:选择可信度最高的边框,并抑制与其有显著重叠的框
[[F1-score]]
- 真阳性TP:被模型预测为正类,而该样本的真实标签也为正类
- 假阳性FP :你声称找到了一根针,但它只是一根稻草。一次虚报。
- 假阴性FN:你错过了一根确实存在的针。一次错失的机会。
- 真阴性Tn:你忽略了一根稻草,而它确实是稻草。正确地忽略了不感兴趣的东西
精确率precision
在所有预测为阳性的事物中,实际有多少为真阳的
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
召回率
在所有实际为阳性的事物中,找到了多少
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
F1-score为为精确率和召回率的调和平均数,衡量所做的真实发现相对于“错误堆”的大小
F 1 = 2 1 Precision + 1 Recall = 2 × Precision × Recall Precision + Recall = 2 T P 2 T P + F P + F N F_1 = \frac{2}{\frac{1}{\text{Precision}} + \frac{1}{\text{Recall}}} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} = \frac{2TP}{2TP + FP + FN} F1=Precision1+Recall12=Precision+Recall2×Precision×Recall=2TP+FP+FN2TP
[[偏差-方差权衡]]
偏差 (Bias)
这部分误差是系统性的、可预测的
eg:你的瞄准器本身存在系统性偏差,导致你瞄准靶心,箭却总是系统性地射向左侧。
方差 (Variance)
随机的、不可预测的散射
eg:即使瞄准器完美无瑕,你的手臂在每次射击时也会有轻微的抖动,导致箭矢围绕你的平均落点散布开来。
不可约减误差 (Irreducible Error)
这种固有的、无法消除的随机性
eg;总有一些你无法控制的因素,比如一阵突如其来的微风。
-
过于简单的模型(高偏差)
性格:固执死板。
表现:无论数据怎么变,它都只认一条直线。虽然很稳定(数据微调它也不变),但根本抓不住数据的真实规律,从一开始就错了。 -
过于复杂的模型(高方差)
性格:过度敏感。
表现:极度灵活,连数据里的噪音(错误点)都强行拟合。在训练集上表现完美,但一旦遇到新数据就彻底抓瞎。只要数据稍有不同,它的形状就会剧烈变化。
寻找“甜蜜点” (The Sweet Spot)
画出一张图:横轴是复杂度,纵轴是误差,会得到一个经典的 U型曲线。
- 左边下坡:模型变强,误差降低(因为偏差在减小)。
- 谷底:最佳平衡点。此时模型既学到了规律,又没被噪音带偏,泛化能力最强。
- 右边上坡:模型想太多,开始过拟合,误差反而飙升(因为方差在爆炸)。
解决:使用[[正则化]]
模型容量与泛化
[[模型容量]]
模型能够拟合多复杂函数的能力。
一个容量低的模型,像是一把简单的直尺,只能画直线。一个容量高的模型,则像是一支灵活的画笔,可以描绘出任何复杂的曲线。
[[K-折交叉验证]]
用一部分来搭建一个微缩模型进行测试,剩下的部分则用来验证测试结果
[[感受器]]
通过计算一个加权和并加上一个偏置项
核心
构建与训练神经网络
[[均方误差损失]]
MSE损失函数
L M S E = ( 1 / n ) × Σ ( y i − y ^ i ) 2 ( i 从 1 到 n ) L_MSE = (1/n) × Σ(y_i - ŷ_i)² (i 从 1 到 n) LMSE=(1/n)×Σ(yi−y^i)2(i从1到n)
[[反向传播]]
从最终的输出(通常是损失 L)开始,问一个问题:“我的值是由谁贡献的?你们各自的贡献度是多少?”
在任何一个扇出节点,其总梯度等于从所有下游分支流回的梯度之和
反向传播的计算成本与参数数量 n 无关,它大致只和前向传播量级相关
[[激活函数]]
[[采样]]
将连续的模拟信号转化为离散的数字信号
上采样:
采样过程中对离散点进行插值,提高分辨率
下采样:
采样过程中选取更关键的离散点,缩小分辨率
经典神经网络
- [[Transfomer]]
- [[CNN卷积]]
- [[RNN循环神经网络]]
- [[项目班#LSTM|LSTM]]
- [[项目班#GRU门控循环单元|GRU门控循环单元]]
- [[GCN图卷积]]
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)