迪AI-神经网络基础学习
迪AI-神经网络基础学习
一、神经网络
机器学习流程:
数据获取 — 特征工程(核心)— 建立模型 — 评估与应用
特征工程的作用:
数据特征决定了模型的上限
预处理和特征提取是最核心的
算法和参数选择决定了如何逼近这个上限
特征如何提取?
传统特征提取方法:
深度学习
比较麻烦,这就是为什么需要深度学习:
相当于黑盒子,通过学习提取一系列最合适的特征:
深度学习的应用:无人驾驶(目标检测和识别)、人脸识别、医学应用、视频换脸、图像修复
数据集IMAGENET:
数据规模越大,深度学习算法效果越好:
计算机视觉-图像分类任务
3颜色通道RGB
面临的挑战:
照射角度、形状改变、部分遮蔽、背景混入
机器学习常规套路
- 收集数据、给定标签
- 训练一个分类器
- 测试、评估
K近邻
问圆圈属于什么类别?看周围的类别谁多分类成谁
K等于几就是画几个在圈里:
计算流程:
- 计算已知类别数据集中的点与当前点距离
- 按照距离依次排序
- 选取与当前点距离最小的K个点
- 确定前K个点所在类别的出现频率
- 返回前K个点出现频率最高的类别作为当前点预测分类
K近邻分析:
KNN算法简单有效,是一种lazy-learning算法
分类器不需要使用训练集进行训练,训练时间复杂度为0
KNN分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中的文档总数为n,那么KNN的分类时间复杂度为O(n)
K值的选择,距离度量和分类决策规则是该算法的三个基本要素
CIFAR-10 数据库简介:
数据小,32x32x3
距离计算:
和训练集中的5w张图像,分别逐像素相减,取绝对值,然后求和
问题:没有区分主体和背景
交叉验证:
神经网络基础
线性函数,从输入到输出的映射
数学表示:
计算属于每个类别对应的得分,每种动物有自己的权重W,因此W要有10个
3072由32x32x3得到,每个类别在每个像素点的权重参数
b是微调,是偏置参数,对于10个类别得到的分数都要进行微调
计算方法:
权重参数越大,表明相应的像素越重要
W如何得到的?
X数据是不会变的,因此神经网络是寻找合适的W
W初始是随机的,根据某些优化方法,不断改进W
决策边界
W是控制着决策边界的,b只是做微调
损失函数
损失函数为0的时候 等于没有损失
用错误类别的分数减去正确类别的分数
+1的作用 相当于容忍程度 错误类别的分数和正确类别的差距至少要大于1分
不是 模型A和模型B关注的不一样
正则化:
惩罚项,由权重参数带来的损失
λ为惩罚系数,λ越大表示不希望过拟合,正则化惩罚更大,如果小点就是意思意思一下
因为神经网络的缺点就是过于强大,过拟合的风险很大
Softmax分类器
随意输入一个数x都可以压缩到0-1之间,恰好把分数转化成了概率值
将分数x做exp操作,放大差异,转化为概率值就是做归一化:
就是把自己的分数除以所有分数的和
归一化之后,用对数函数求损失,希望正确类别的概率离1越近越好 而损失值就越小
回归任务 – 得分值
分类任务 – 概率值
前向传播
由x和w怎么得到一个损失
反向传播
根据loss调整w
在前向传播中,得分函数往往是多次变换组合,多个W一起去做 ,每一步关注的不一样
梯度下降:
希望损失函数的值越低越好 分别求偏导(相当于对结果做了多少贡献)
先是f对z求偏导 就知道z对结果的影响
而x经过了2步,先让f对q做偏导 再乘以q对x求的偏导 — 链式求导
y同理 逐层计算
反向传播中就是逐层计算
可以
整体架构:
层次结构:一层一层办事,在前者的基础上做事
神经元: 输入数据的特征数 有多少圈代表有多少输入特征
全连接:每个圆圈都连在一起
中间层:人类不好理解 计算机可以
权重:线条就是权重 把3个特征转换到4个特征 权重参数 [3,4]
W1 W2 W3
- 非线性:在每一步矩阵计算后的激活函数
神经元个数对结果的影响:理论上越多越好,但是出现过拟合
增加一个神经元、实际上是增加了一组参数
正则化的作用:
惩罚力度越小,越符合训练的结果。加大惩罚力度,要平滑的多
参数个数对结果的影响:
神经元个数就是希望转化的特征数量,常见的是64 128 256…
激活函数:
就是非线性变换
sigmoid极端处会出现梯度消失 如果梯度为0 会导致后续的梯度也为0 因为是乘法操作
Relu更实用 没有梯度消失现象
数据预处理:
数据要做预处理 例如中心化(减去均值)、归一化(除以标准差)
参数初始化:
权重参数矩阵给随机的值 随机策略 生成随机参数
0.01 初始化结果就都比较小
防止过拟合,还可以使用DROP-OUT:
完整的神经网络 全连接 B图就是在训练中 每一层随机杀死神经元 每次训练都是随机选择一部分
每次训练 架构都简单些
神经网络:
就是找权重参数 什么权重参数最适合网络
二、卷积神经网络CNN
检索:判断图片是什么 再寻找相似度高的图片出来
卷积与传统神经网络nn的区别:
输入数据不是一列向量 是三维的 长方体
卷积:提取特征
池化:压缩特征
卷积做了什么?
把一张图像分成很多份,比如猫的眼睛 鼻子 嘴 不同的地方进行处理
每一块不止一个像素点 例如3x3的区域 对当前区域使用权重参数得到特征值
不同区域得到的特征不一样 选择一种计算方法 计算每个区域的特征值
找最好的权重参数 最适合的权重参数
图像颜色通道:
做计算的时候,每个颜色通道都要分别计算 – RGB
最后要进行加法操作 把3个通道的结果加起来
Filter的通道数必须和输入数据的通道数相同
核:就是选择多大的区域对应于一个特征值
做的是内积计算 各元素相乘 每个通道做内积最后加起来得到一个特征值 记得加上b偏置
最终是得到一个特征图
核可以是多个 f1-f6 得到丰富的特征 结果的通道数就是特征图的个数
同一个卷积层 核的大小必须是相同的
卷积得到的特征图再做卷积
6个卷积核 卷积核的通道数一定和输入数据的通道数相同
10个卷积核
…
经过多次卷积提取有用的特征
不同步长得到的特征图大小不一样
步长比较小的时候 细粒度越高 特征图更丰富
图像任务的时候步长一般为1 效率比较低
卷积核尺寸是选择区域的大小 卷积核越小 细粒度越高
因为卷积的时候 边界点没有中间点利用的次数多 因此通过填充 让边界信息利用充分
用0填充 不会对结果产生负面影响
卷积核个数 对应的是得到的特征图的个数
计算:
H1 原始输入 FH 是核的高度 P是padding 填充0的圈数
例子:
特征图大小可能不变
卷积参数共享:
每个卷积区域 用相同的核
每一个卷积核有一个对应的偏置参数
池化:
压缩作用 进行筛选 通道数不变 宽高可以改变
最大池化:(常用)
每个区域选择最大值
平均池化:
每个区域求平均值
卷积神经网络:
卷积层+激活函数是一个必须的组合
两次卷积、一个池化…
如何将特征图长方体进行分类任务?还得是全连接层。
拉成特征向量,输入到全连接层,得到分类结果
通常是带参数计算的 叫做一层(卷积层、全连接层)
特征图变化:
经典网络:
- ALEXNET
pool之后 会损失信息 用特征图个数弥补损失 翻倍了
- VGG
用更深的网络层数去做 效果不一定更好
- RESNET
利用同等映射 如果表现不好 如果B不好 把B的权重参数全部置为0 A和C直接连接
任务是分类还是回归 取决于损失函数和最后的连接
把resnet当做特征提取 是一种通用的网络结构
感受野:
无论中间多少层 最后感受到的是原始输入的野
最后的值是前面多少个值得到的
为什么:
三、递归神经网络RNN
预测结果的时候 可以把中间和前面的结果考虑进来
CNN 主要用于计算机视觉
RNN 主要用于自然语言处理
不同时刻,人为区分的,h0 h1 h2..代表中间结果
ht表示综合之前所有特征 一般只选最后结果
四、LSTM网络
RNN网络记忆好 把之前所有结果记忆下来
LSTM可以健忘一些
C决定保留和遗忘
LSTM是在RNN基础上改进的,加上了C控制参数,控制当前模型复杂度
可以进行信息的过滤
架构:
五、自然语言处理-词向量模型-Word2Vec
文本向量化后计算机才认识
基本的出发点:构建词向量
通常,数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖(50-300维)
50维 很难解释 只有计算机认识
热度图:
相近的词位置是相似的
如何训练词向量?— 词要如何写成一个向量
预测下一个词
和神经网络的多分类挺像的 预测下一个词哪个词的概率更高
先把词在词库中匹配向量 随机初始向量组 然后迭代更新输入变量使损失更小 能够更精准预测下一个词
训练数据:
平移 指定滑动窗口 扫描 得到输入输出
不同模型对比:
- CBOW
输入是上下文,输出中间的词
t是输出:
- Skipgram
输入是中间的词 输出是上下文的预测
不仅要更新权重 还要更新数据
庞大的语言库 最终希望得到的正确分类概率越高越好
把原来的输出也放到输入
自己添加标签 target为0的 负样本 人为创造的 推荐5个
词向量训练过程:
找对应的矩阵:
in out都要进行更新的
最终得到词向量模型