迪AI-神经网络基础学习

迪AI-神经网络基础学习

一、神经网络

机器学习流程:

数据获取 — 特征工程(核心)— 建立模型 — 评估与应用

特征工程的作用:

  • 数据特征决定了模型的上限

  • 预处理和特征提取是最核心的

  • 算法和参数选择决定了如何逼近这个上限

特征如何提取?

image-20240321195233298

传统特征提取方法:

image-20240321195318340

深度学习

比较麻烦,这就是为什么需要深度学习:

相当于黑盒子,通过学习提取一系列最合适的特征:

image-20240321195433086

深度学习的应用:无人驾驶(目标检测和识别)、人脸识别、医学应用、视频换脸、图像修复

数据集IMAGENET:

image-20240321202043785

数据规模越大,深度学习算法效果越好:

image-20240321202214294

计算机视觉-图像分类任务

3颜色通道RGB

image-20240321202335768

面临的挑战:

照射角度、形状改变、部分遮蔽、背景混入

image-20240321202448792

机器学习常规套路

  • 收集数据、给定标签
  • 训练一个分类器
  • 测试、评估

image-20240321202638832

K近邻

问圆圈属于什么类别?看周围的类别谁多分类成谁

K等于几就是画几个在圈里:

image-20240321203518694

计算流程:

  • 计算已知类别数据集中的点与当前点距离
  • 按照距离依次排序
  • 选取与当前点距离最小的K个点
  • 确定前K个点所在类别的出现频率
  • 返回前K个点出现频率最高的类别作为当前点预测分类

K近邻分析:

  • KNN算法简单有效,是一种lazy-learning算法

  • 分类器不需要使用训练集进行训练,训练时间复杂度为0

  • KNN分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中的文档总数为n,那么KNN的分类时间复杂度为O(n)

  • K值的选择,距离度量和分类决策规则是该算法的三个基本要素

CIFAR-10 数据库简介:

数据小,32x32x3

image-20240321205957826

距离计算:

和训练集中的5w张图像,分别逐像素相减,取绝对值,然后求和

image-20240321210509541

image-20240321210703137

问题:没有区分主体和背景

image-20240321211446688

交叉验证:

image-20240321210809493

image-20240321210904342

image-20240321211248857

image-20240321210924072

神经网络基础

线性函数,从输入到输出的映射

image-20240321212441827

数学表示:

计算属于每个类别对应的得分,每种动物有自己的权重W,因此W要有10个

3072由32x32x3得到,每个类别在每个像素点的权重参数

b是微调,是偏置参数,对于10个类别得到的分数都要进行微调

image-20240321213137771

计算方法:

权重参数越大,表明相应的像素越重要

image-20240321213340108

W如何得到的?

X数据是不会变的,因此神经网络是寻找合适的W

W初始是随机的,根据某些优化方法,不断改进W

决策边界

W是控制着决策边界的,b只是做微调

image-20240321213812143

损失函数

image-20240321213939143

损失函数为0的时候 等于没有损失

用错误类别的分数减去正确类别的分数

+1的作用 相当于容忍程度 错误类别的分数和正确类别的差距至少要大于1分

image-20240321214028180

不是 模型A和模型B关注的不一样

image-20240322000626595

正则化:

惩罚项,由权重参数带来的损失

λ为惩罚系数,λ越大表示不希望过拟合,正则化惩罚更大,如果小点就是意思意思一下

因为神经网络的缺点就是过于强大,过拟合的风险很大

image-20240322000825710

image-20240322004702274

Softmax分类器

随意输入一个数x都可以压缩到0-1之间,恰好把分数转化成了概率值

image-20240322004755210

将分数x做exp操作,放大差异,转化为概率值就是做归一化:

就是把自己的分数除以所有分数的和

归一化之后,用对数函数求损失,希望正确类别的概率离1越近越好 而损失值就越小

image-20240322005341917

回归任务 – 得分值

分类任务 – 概率值

前向传播

由x和w怎么得到一个损失

image-20240322005555783

反向传播

根据loss调整w

image-20240322005627191

在前向传播中,得分函数往往是多次变换组合,多个W一起去做 ,每一步关注的不一样

image-20240322151332773

梯度下降:

image-20240322152145853

image-20240322152213537

image-20240322152302055

希望损失函数的值越低越好 分别求偏导(相当于对结果做了多少贡献)

先是f对z求偏导 就知道z对结果的影响

而x经过了2步,先让f对q做偏导 再乘以q对x求的偏导 — 链式求导

y同理 逐层计算

反向传播中就是逐层计算

image-20240322152647722

image-20240322152714770

image-20240322152758276

image-20240322152806729

可以

image-20240322155459089

image-20240322155603832

整体架构:

image-20240322162532669

  • 层次结构:一层一层办事,在前者的基础上做事

  • 神经元: 输入数据的特征数 有多少圈代表有多少输入特征

  • 全连接:每个圆圈都连在一起

  • 中间层:人类不好理解 计算机可以

  • 权重:线条就是权重 把3个特征转换到4个特征 权重参数 [3,4]

W1 W2 W3

  • 非线性:在每一步矩阵计算后的激活函数

image-20240322162850601

image-20240322163512866

image-20240322163522369

神经元个数对结果的影响:理论上越多越好,但是出现过拟合

增加一个神经元、实际上是增加了一组参数

正则化的作用:

惩罚力度越小,越符合训练的结果。加大惩罚力度,要平滑的多

image-20240322213718026

参数个数对结果的影响:

神经元个数就是希望转化的特征数量,常见的是64 128 256…

image-20240322213939919

激活函数:

就是非线性变换

image-20240322214049262

sigmoid极端处会出现梯度消失 如果梯度为0 会导致后续的梯度也为0 因为是乘法操作

Relu更实用 没有梯度消失现象

image-20240322220832806

数据预处理:

数据要做预处理 例如中心化(减去均值)、归一化(除以标准差)

image-20240323105624533

参数初始化:

权重参数矩阵给随机的值 随机策略 生成随机参数

0.01 初始化结果就都比较小

image-20240323105606217

防止过拟合,还可以使用DROP-OUT:

完整的神经网络 全连接 B图就是在训练中 每一层随机杀死神经元 每次训练都是随机选择一部分

每次训练 架构都简单些

image-20240323111955383

神经网络:

就是找权重参数 什么权重参数最适合网络

image-20240323112247340

二、卷积神经网络CNN

image-20240323113605752

image-20240323113709657

检索:判断图片是什么 再寻找相似度高的图片出来

image-20240323113717080

image-20240323113814780

image-20240323113827821

image-20240323113840520

image-20240323113922498

卷积与传统神经网络nn的区别

输入数据不是一列向量 是三维的 长方体

image-20240323113955554

卷积:提取特征

池化:压缩特征

image-20240323114107526

卷积做了什么?

  • 把一张图像分成很多份,比如猫的眼睛 鼻子 嘴 不同的地方进行处理

  • 每一块不止一个像素点 例如3x3的区域 对当前区域使用权重参数得到特征值

  • 不同区域得到的特征不一样 选择一种计算方法 计算每个区域的特征值

  • 找最好的权重参数 最适合的权重参数

image-20240323120136530

图像颜色通道:

做计算的时候,每个颜色通道都要分别计算 – RGB

最后要进行加法操作 把3个通道的结果加起来

image-20240323120351228

Filter的通道数必须和输入数据的通道数相同

核:就是选择多大的区域对应于一个特征值

做的是内积计算 各元素相乘 每个通道做内积最后加起来得到一个特征值 记得加上b偏置

最终是得到一个特征图

image-20240323120847575

核可以是多个 f1-f6 得到丰富的特征 结果的通道数就是特征图的个数

同一个卷积层 核的大小必须是相同的

image-20240323123639001

卷积得到的特征图再做卷积

image-20240323124033635

6个卷积核 卷积核的通道数一定和输入数据的通道数相同

10个卷积核

经过多次卷积提取有用的特征

image-20240323131330271

image-20240323131749989

不同步长得到的特征图大小不一样

步长比较小的时候 细粒度越高 特征图更丰富

图像任务的时候步长一般为1 效率比较低

image-20240323131800029

卷积核尺寸是选择区域的大小 卷积核越小 细粒度越高

因为卷积的时候 边界点没有中间点利用的次数多 因此通过填充 让边界信息利用充分

用0填充 不会对结果产生负面影响

image-20240323132346943

image-20240323132522253

卷积核个数 对应的是得到的特征图的个数

计算:

image-20240323132728711

H1 原始输入 FH 是核的高度 P是padding 填充0的圈数

image-20240323132708946

例子:

特征图大小可能不变

image-20240323143545183

卷积参数共享:

每个卷积区域 用相同的核

每一个卷积核有一个对应的偏置参数

image-20240323144202538

池化:

压缩作用 进行筛选 通道数不变 宽高可以改变

image-20240323144555454

最大池化:(常用)

每个区域选择最大值

image-20240323144656961

平均池化:

每个区域求平均值

卷积神经网络:

卷积层+激活函数是一个必须的组合

两次卷积、一个池化…

如何将特征图长方体进行分类任务?还得是全连接层。

拉成特征向量,输入到全连接层,得到分类结果

通常是带参数计算的 叫做一层(卷积层、全连接层)

image-20240323144807170

特征图变化:

image-20240323145055610

经典网络:

  • ALEXNET

image-20240323145543624

pool之后 会损失信息 用特征图个数弥补损失 翻倍了

  • VGG

image-20240323145620441

用更深的网络层数去做 效果不一定更好

  • RESNET

利用同等映射 如果表现不好 如果B不好 把B的权重参数全部置为0 A和C直接连接

image-20240323145823746

image-20240323150116911

image-20240323150137949

任务是分类还是回归 取决于损失函数和最后的连接

把resnet当做特征提取 是一种通用的网络结构

image-20240323150220415

感受野:

无论中间多少层 最后感受到的是原始输入的野

最后的值是前面多少个值得到的

image-20240323150342629

image-20240323162233484

为什么:

image-20240323162548862

三、递归神经网络RNN

预测结果的时候 可以把中间和前面的结果考虑进来

image-20240323164311174CNN 主要用于计算机视觉

RNN 主要用于自然语言处理

不同时刻,人为区分的,h0 h1 h2..代表中间结果

ht表示综合之前所有特征 一般只选最后结果

image-20240323165912756

四、LSTM网络

RNN网络记忆好 把之前所有结果记忆下来

LSTM可以健忘一些

image-20240323170019110

C决定保留和遗忘

image-20240323170034459

image-20240323170042587

image-20240323170059371

image-20240323170108477

image-20240323170153092

LSTM是在RNN基础上改进的,加上了C控制参数,控制当前模型复杂度

可以进行信息的过滤

架构:

image-20240323170310004

五、自然语言处理-词向量模型-Word2Vec

文本向量化后计算机才认识

基本的出发点:构建词向量

image-20240323174458965

通常,数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖(50-300维)

image-20240323174546034

50维 很难解释 只有计算机认识

image-20240323174807095

热度图:

相近的词位置是相似的

image-20240323174842511

如何训练词向量?— 词要如何写成一个向量

预测下一个词

image-20240323175120105

和神经网络的多分类挺像的 预测下一个词哪个词的概率更高

image-20240323175448074

先把词在词库中匹配向量 随机初始向量组 然后迭代更新输入变量使损失更小 能够更精准预测下一个词

image-20240323175750416

训练数据:

image-20240323180029606

image-20240323180151241

平移 指定滑动窗口 扫描 得到输入输出

image-20240323180210049

不同模型对比:

  • CBOW

输入是上下文,输出中间的词

image-20240323180806133

t是输出:

image-20240323180826507

  • Skipgram

输入是中间的词 输出是上下文的预测

image-20240323180856994

image-20240323180939569

image-20240323181000582

image-20240323181025369

不仅要更新权重 还要更新数据

image-20240323183800079

庞大的语言库 最终希望得到的正确分类概率越高越好

image-20240323181132200

把原来的输出也放到输入

image-20240323183908065

image-20240323184013420

自己添加标签 target为0的 负样本 人为创造的 推荐5个

词向量训练过程:

image-20240323184307862

找对应的矩阵:

image-20240323184444998

in out都要进行更新的

最终得到词向量模型

image-20240323184506669