一、数据操作+预处理

N维数组

N维数组是机器学习和神经网络的主要数据结构

0-d 标量:一个数字

1-d 向量:一个特征向量

2-d 矩阵:一个样本-特征矩阵

3-d RGB图片(宽×高×通道)

4-d 一个RGB图片的批量(批量大小batch×宽×高×通道)

创建数组

需要:

  1. 形状

  2. 每个元素的数据类型

  3. 每个元素的值

访问元素

image-20241203172021813

左下角子区域:1:3表示[1,3)

第二个子区域: ::3表示行是每3行一跳

​ ::2表示列是每两列一跳

关于内存

x += y 就是直接在原来的x上加上y,与加法的形式不一样

x = x + y 本质上是将值给了一个新的x,开辟了个新的内存

矩阵乘法

image-20241204093735764

image-20241204093821205

特征向量:不被矩阵改变方向的向量

矩阵范数的求法:

https://www.bilibili.com/video/BV1HD4y1u7yD/?spm_id_from=333.337.search-card.all.click&vd_source=bbecda1ec31c9852a00a62b75b7a6154

矩阵按列求和

axis=0 行

axis=1 列

就是照着那个轴拍扁(全相加)

按单个axis求和

比如shape [5,4]

axis = 1 ,sum:[5] 我不要列了–> 按列向右拍扁

按多个axis求和

shape [2,5,4]

axis=[1,2] sum:[2]

如果 keepdims=True 那对应的那个维度就不拍扁

shape [2,5,4]

axis=1, sum:[2,1,4]

二、线性回归

是对n维输入的加权,外加偏差
$$
y=w_1x_1+w_2x_2+…+w_nx_n+b
$$
向量版本:y=<w,x>+b

可以看做单层神经网络

衡量预估质量 —— 平方损失 L2 Loss

$$
l = \frac{1}{2}(y-\hat{y})^2
$$

image-20241204185859597

缺点:y‘和y相差很多时梯度太大 -》 使用L1 Loss

参数学习

image-20241204154124850

显示解

image-20241204154306164

基础优化方法

梯度下降

image-20241204155610564

image-20241204155650413

选择批量大小

image-20241204160000557

batch_size 小的话可能会引入噪声,但这个噪声可能会使模型预测不走偏,因此准确度可能更高

随机梯度下降(SGD)

梯度下降是根据所有样本的平均损失进行计算,需要将所有样本重新计算一遍,非常浪费时间。

因此通常采用小批量随机梯度下降(SGD)进行求解。

三、softmax 回归(多类分类模型)

得到每个类的预测置信度

使用交叉熵来衡量预测和真实情况的区别,作为损失函数

回归和分类的区别

image-20241204165608832

无校验比例

希望预测出的类的置信度和别的类的置信度的差最大

校验比例

image-20241204170751785

作指数是为了将数值变为非负。并且经过操作后使得加起来和为1

交叉熵损失

常用来衡量两个概率的区别

image-20241204171019482 image-20241204171116885

损失函数

L1 Loss

image-20241204190106547

缺点:原点处不可导;y’和y离得很近的时候不稳定 -》结合L1和L2 Loss得到下面这个损失函数

Huber’s Robust Loss

image-20241204190202725

鲁棒性 robustness

系统的健壮性——系统在特殊情况下的稳定性

四、感知机

感知机

image-20241204202800593

只输出一个离散的类,因此只能用于二分类

  1. 最早的AI模型之一
  2. 求解算法等价于使用批量大小为1的梯度下降
  3. 不能拟合XOR函数

多层感知机 MLP(Multilayer Perceptron)

image-20241204205122365

这样得到的结果还是线性的,和单一的线性模型没什么区别(只是加权偏移,限制了对复杂任务的处理能力,只能解决线性问题),因此需要加入非线性激活函数

神经网络为什么working?

将同一个输入给不同的神经元,每个神经元学习不同的特性,在最后线性计算合并这些特性,输出结果。

https://www.bilibili.com/video/BV1YD4y1f7p6/?spm_id_from=333.337.search-card.all.click&vd_source=bbecda1ec31c9852a00a62b75b7a6154

非线性激活函数

激活函数的本质就是引入非线性性

用relu就好了,用其他的区别也不大。而且relu计算更快

image-20241204205224974

image-20241204205325193

image-20241204205411680

nn.ReLU(inplace=True)中的inplace表示直接原地修改内容,而不是新开内存进行修改,可以节省一点内存。

多隐藏层

多隐藏层一般是先扩展再压缩,先压缩的话会损失很多信息。

最后一层不要加非线性激活函数,加了会造成层数的塌陷。

image-20241204210708019

为什么是多层而不是一层很宽?

一层很宽,即让很多神经元在一起学习,不一定会有很好的效果,可能会导致过拟合。而多层的话相当于一次学一点。—>深度学习

五、模型选择

训练误差、泛化误差

训练误差:模型在训练数据上的误差

泛化误差:模型在新数据上的误差

验证数据集、测试数据集

验证数据集:一个用来评估模型好坏的数据集

  • 例如拿出50%的训练数据
  • 不要跟训练数据混在一起!!

测试数据集:只用一次的数据集

例如:

  • 未来的考试
  • 房子的实际成交价

K-则交叉验证

在没有足够多数据时使用

image-20241205203809267

最后选择最好的那一次的参数作为模型的参数

过拟合、欠拟合

image-20241205204242125 image-20241205204358790

过拟合:数据很简单,模型容量很高,模型可能记住这些数据,但别的数据拟合程度不高。

模型容量

拟合各种函数的能力

  1. 低容量的模型难以拟合训练数据
  2. 高容量的模型可以记住所有的训练数据
image-20241205204630093

首先模型要大,再考虑怎么降低泛化误差

image-20241205205100162

估计模型容量

image-20241205205301358

数据复杂度

  • 样本个数
  • 每个样本的元素个数
  • 时间、空间结构
  • 多样性

六、权重衰退

范数

高维空间中一点到原点的距离

L1范数 —— 曼哈顿距离

各坐标值绝对值相加

image-20241207155850492

L2范数 —— 欧几里得距离

高维中的勾股定理

image-20241207155811269

LP范数

image-20241207155945232

正则化 —— 权重衰退

每一次会缩小w的取值范围

如果模型很复杂,权重衰退也不会带来很好的效果。

为什么需要正则化?

模型可能会过度拟合训练数据,过于依赖训练数据中的噪声和细节。正则化通过降低模型的复杂度来防止过度拟合。

正则化会在损失函数中加入一个正则化项,它会使模型中的某些参数不能太大,因此模型会更倾向于选择那些对预测结果有更大影响的参数,减少对其他参数的依赖。

image-20241207162432013

L1正则化

L1正则化可能带来稀疏性,某些特征就不起作用了(去耦合,减少过拟合)

L2正则化

只缩小了W的权重

如何操作

1、手动

如果是手动加的话,就是在loss函数中加一个正则化的式子

λ自己试,看看什么时候好

2、在trainer中加参数

加一个weight_decay的参数,一般设置成1e-3

image-20241207184655244

这里使用的是L2范数的平方

七、丢弃法 dropout

在层之间加噪音

只在训练中使用,在预测中不使用。在测试时,Dropout层仅传递数据

动机

一个好的模型需要对输入数据的扰动鲁棒robust

无偏差的加入噪音

image-20241207193214310

一定概率变成0,一定概率x值变大,但期望不变

使用丢弃法

通常将丢弃法作用在隐藏全连接层的输出上

全连接层——每一个结点都与上一层的所有结点相连

image-20241207193520066

八、数值稳定性

数值爆炸

  1. 值超出值域,对于16位浮点数尤为严重

  2. 对学习率敏感

    • ​ 如果学习率太大->参数值会大->更大的梯度

    • ​ 如果学习率太小->训练无法进展

    • ​ 需要再训练中不断调整学习率

梯度消失

  1. 梯度值变成0
    • 对16位浮点数尤为严重
  2. 训练无进展
  3. 对底部层尤为严重
    • 仅仅顶部层训练的较好
    • 无法让神经网络更深

让训练更稳定

image-20241207205634808

合理的权重初始值和激活函数的选取可以提升数值稳定性

每一层的输出E=0,D=一个常数

九、kaggle 房价预测

标准化

数据预处理

标准化数据

image-20241208160943334