机器学习的网络们

机器学习的网络们

  • [1. 线性神经网络](#1. 线性神经网络)
    • [1.1 线性回归](#1.1 线性回归)
    • [1.2 softmax 回归](#1.2 softmax 回归)
  • [2. 多层感知机](#2. 多层感知机)
  • [3. 卷积神经网络](#3. 卷积神经网络)
  • [4. 现代神经网络](#4. 现代神经网络)
    • [4.1 深度卷积神经网络(AlexNet 2012)](#4.1 深度卷积神经网络(AlexNet 2012))
    • [4.2 使用块网络(VGG 2014)](#4.2 使用块网络(VGG 2014))
    • [4.3 网络中的网络(NIN)](#4.3 网络中的网络(NIN))
    • [4.4 GoogleLeNet 2014](#4.4 GoogleLeNet 2014)
    • 排名
    • [4.5 ResNet 残差网络](#4.5 ResNet 残差网络)

申明:资料大部分来源于d2l,如有错误还望指正

1. 线性神经网络

1.1 线性回归

线性网络,对应的就是基础的线性函数

网络结构大概如下所示,输出的内容则主要是0,1两个数字,

实现代码

python 复制代码
def linreg(X, w, b):  #@save
    """线性回归模型"""
    return torch.matmul(X, w) + b

1.2 softmax 回归

从线性回归到了多分类回归,可以输出多个结果

表达式

实现的代码

python 复制代码
def softmax(X):
    X_exp = torch.exp(X)
    partition = X_exp.sum(1, keepdim=True)
    return X_exp / partition  # 这里应用了广播机制

2. 多层感知机

类似下图这样的两个颜色的点就无法成功拟合出来

2.1 多层感知机

单分类

此处引入激活函数

通过激活函数引入非线性的特性,从而更加方便的提升复杂度,拟合曲线

多分类

增加softmax函数从而增加多分类的可能性

多隐藏层

3. 卷积神经网络

3.1 卷积核

在处理图片的任务的时候,全连接会带来参数过多的问题,通过卷积的方式去解决。

个人理解:全连接是将二维数据一维化之后,再处理。在维度变化的时候,也去除了很多二维本身带来的关联信息,所以在处理数据时候,还是需要用二维的方式来处理,也就引出了大名鼎鼎的卷积层。

下面这个图是图像处理中常用的一些卷积矩阵,,这些矩阵可以实现对图像的特征提取

多输入输出通道

多输入

多输出


多输出在图生图的时候会有较大的作用

3.2 池化层

基于像素的卷积会对特定的位置敏感,所以需要一个对位置不那么敏感的方法。所以就选出了池化层。

所谓最大池化就是在一个矩阵中去选个最大值,放入下个矩阵中去,它最大的特点是将之前卷积层的矩阵乘法简化成了求最大值,简化了数十倍的计算量

常见的池化方法有最大池化,和平均池化

整个神经网络,似乎就是不断的增加复杂度,然后寻找一些降低复杂度的方法。再增加复杂度,再寻找降低复杂度的方法,不断的循环。

3.3 卷积神经网络(LeNet 1998)


我们对原始模型做了一点小改动,去掉了最后一层的高斯激活。除此之外,这个网络与最初的LeNet-5一致

python 复制代码
import torch
from torch import nn
from d2l import torch as d2l

net = nn.Sequential(
    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Flatten(),
    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.Sigmoid(),
    nn.Linear(84, 10))

4. 现代神经网络

4.1 深度卷积神经网络(AlexNet 2012)

图7.1.2 从LeNet(左)到AlexNet(右)


一些细节

1.激活函数 sigmoid 到 ReLu 减缓了梯度消失

  1. 隐藏全连接层后增加了丢弃层

  2. 数据增强

  3. 最大池化层

  4. 模型并行:将模型分成多个快,每个GPU计算一部分结果。

第一点的改变,可以类比成模拟信号,降低了放大倍数,减小了削顶失真和削底失真,使得模拟量有了更多的输出,而不是直接输出0,1两个数值。由此可见使用模拟的方式来实现计算,是否能够大大加强计算速度?或者太多的失真值后,可以给个错误信号,从而重新计算。

第二点,增加丢弃层后会有改善,证明有部分网络,负优化了参数。而准确的找到负优化的点,或者拆分模型分别计算,再混合结果,兴许有更好的概率,但会增加计算复杂度。

4.2 使用块网络(VGG 2014)

VGG 将单个的层,封装成了特定的网络块。然后再加几层全连接层输出。

4.3 网络中的网络(NIN)

NIN 算是比较特殊的VGG快?

卷积之后加了两个全连接层,

双全连接层在alexnet 中已经验证过,会比价有作用。

总结:

NIN 快使用卷积层,加两个1*1 卷积层,卷积层添加了非线性

NIN 使用全局平均池化层来代替VGG和AlexNet中的全连接层----不容易过拟合,更少的参数个数

4.4 GoogleLeNet 2014

在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Inception V4等版本。

这是单独的一个网络块,使用了多通道去抽取特征,然后将结果合并,也验证了多通道能提升识别准确程度的佐证。


后续的变种




排名

4.5 ResNet 残差网络

现在遇到的问题是,增加了更多的网络,反而没有能训练出性能更好的网络,所以引入了残差块的概念

所谓残差块,也许可以理解为反馈电路中的正反馈,通过反馈来实现提升精度。现在负反馈尚未出现,所以也许可以试试负反馈的方式,也许能有意想不到的性能。




相关推荐
IT古董18 分钟前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
凯哥是个大帅比18 分钟前
人工智能ACA(五)--深度学习基础
人工智能·深度学习
m0_7482329238 分钟前
DALL-M:基于大语言模型的上下文感知临床数据增强方法 ,补充
人工智能·语言模型·自然语言处理
szxinmai主板定制专家44 分钟前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
海棠AI实验室1 小时前
AI的进阶之路:从机器学习到深度学习的演变(三)
人工智能·深度学习·机器学习
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Hacker_Fuchen1 小时前
天融信网络架构安全实践
网络·安全·架构
上海运维Q先生1 小时前
面试题整理15----K8s常见的网络插件有哪些
运维·网络·kubernetes
机器懒得学习1 小时前
基于YOLOv5的智能水域监测系统:从目标检测到自动报告生成
人工智能·yolo·目标检测