自定义神经网络一之Tensor和神经网络

前言

神经网络是AI界的一个基础概念,当下火热的神经网络例如RNN循环神经网络或者CNN卷积神经网络,都是从基础的神经网络发展而来的。

本系列博客的主要目标是自定义一个神经网络,并把训练结果保存到模型文件。想要完成这个目标,了解基础的概念必不可少。

本章主要是介绍Tensor和神经网络基础概念,以及常见的神经网络特点和应用场景等。

Tensor

参考:张量(Tensor):神经网络的基本数据结构

具体的内容可以参考知乎大佬的文章,我们在自定义神经网络的时候,一般用numpy的ndarray类型即可,也就是自己定义多维数组来作为"Tensor"。 相比于Pytorch等训练框架的Tensor来说,ndarray只能在CPU侧进行运算,且没有自动微分等高级特性,不过也足够用了。

Tensor张量是可以说是神经网络运算的基石,一方面是可以代表多维的数据,例如我们常用的二维数组,三维数组,另一方面当下火热的训练框架pytorch和tensorflow都重新定义了Tensor对象,使Tensor对象可以利用GPU的并行计算能力,以及拥有自动微分等特性。

神经网络

参考:什么是神经网络? - 知乎
神经网络模型--数学建模_建立基于神经网络的数学模型-CSDN博客

现在网络上关于神经网络的文章已经很多了,大家根据参考链接学习即可。

简单来说,神经网络就是模拟人的大脑神经进行信息处理的数学模型。

单层神经网络:

多层神经网络:

深度神经网络DNN

2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层(参考论文:Hinton G E, Salakhutdinov R R. Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006, 313(5786):504-507.),神经网络真正意义上有了"深度",由此揭开了深度学习的热潮。这里的"深度"并没有固定的定义------在语音识别中4层网络就能够被认为是"较深的",而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了 sigmoid,形成了如今 DNN 的基本形式。单从结构上来说,全连接的DNN和上图的多层感知机是没有任何区别的。值得一提的是,今年出现的高速公路网络(highway network)和深度残差学习(deep residual learning)进一步避免了梯度弥散问题,网络层数达到了前所未有的一百多层(深度残差学习:152层)

卷积神经网络CNN

参考:
CNN笔记:通俗理解卷积神经网络_cnn卷积神经网络-CSDN博客
图解CNN:通过100张图一步步理解CNN-CSDN博客
卷积神经网络和深度神经网络的区别是什么? - 知乎

具体的看链接吧,讲的很清楚。

简单来说,CNN主要用于图像识别领域,主要解决特征提取的问题。通过卷积和池化来减少参数量。

卷积神经网络有2大特点

  • 能够有效的将大数据量的图片降维成小数据量
  • 能够有效的保留图片特征,符合图片处理的原则

循环神经网络RNN

参考:
如何理解RNN(循环神经网络),能举一些简单的例子吗? - 知乎
(新手向)能否简单易懂的介绍一下RNN(循环神经网络)? - 知乎
dennybritz.com/posts/wildm...

简单来说,RNN被称为循环,因为它对序列列的每个元素执行相同的任务,并且基于先前的计算进行输出。RNN的另一个优点是它具有"记忆",它可以收集到目前为止已经计算的信息。RNN常用于NLP领域。
RNN 从始至终意图解决的都是"记忆"问题,而非 CNN 所解决的"提取"问题。两者并不冲突,甚至还可以适度融合,即组合形成 CNN+RNN 融合模型(Hybrid Model)

残差网络ResNet

参考:
对ResNet本质的一些思考
ResNet原理与性能分析:解空间与优化视角
ResNet的基础:残差块的原理

在深度学习中,为了增强模型的学习能力,网络层会变得越来越深,但是随着深度的增加,也带来了比较一些问题,主要包括:

  • 模型复杂度上升,网络训练困难;
  • 梯度消失/梯度爆炸
  • 网络退化,也就是说模型的学习能力达到了饱和,增加网络层数并不能提升精度了。

为了解决网络退化问题,何凯明大佬提出了深度残差网络来解决以上问题。 具体的可以参考链接进行学习。

Transformer

网络上关于Transformer的文章也很多,给大家推荐几篇学习的文章。

参考:
ChatGPT牛逼,是因为Transformer模型牛逼...-CSDN博客
jalammar.github.io/illustrated...
(六十)通俗易懂理解------Transformer原理解析

学习实战的库: github.com/google/trax

以下是Transformer的简介

2017年12月-Tranformer颠覆性的Tranformer架构出世了!

Googl机器翻译团队在年底的顶级会议NIPS上发表了里程碑式的论文《Attention is all you need》,提出只使用自注意力(Self Attention)机制来训练自然语言模型,并给这种架构起了个霸气的名字:Transformer。

所谓"自我注意力"机制,简单说就是只关心输入信息之间的关系,而不再关注输入和对应输出的关系。和之前大模型训练需要匹配的输入输出标注数据相比,这是一个革命性的变化。

**Transformer彻底抛弃了传统的CNN和RNN等神经网络结构。**在这篇论文发布之前,主流AI模型都基于CNN卷积神经网络和RNN循环神经网络(recurrent neural network); 而之后,便是Transformer一统天下。

它具有两点无敌的优势:

自我注意力机制

让模型训练只需使用未经标注的原始数据,而无需再进行昂贵的的人工标注(标注输入和对应输出)。

基于自我注意力机制的Transformer模型的出现是革命性的, 最最重要的一点, 它能实现自我监督学习. 所谓自我监督, 就是不需要标注的样本, 使用标准的语料或者图像, 模型就能学习了.

在Tranformer出现之前, 我们要训练一个深度学习模型, 必须使用大规模的标记好的数据集合来训练神经网络. 对数据进行标注只能人工进行, 金钱和时间成本都相当高.

并行效率

并行效率是之前的AI模型结构被一直诟病的地方。抛弃了传统CNN/RNN架构后,基于Transformer架构的大模型训练可以实现高度并行化,这大大提高了模型训练的效率;更不用说, Attention注意力机制只关注部分信息, 参数较少, 容易训练.

总结

以上简单介绍了一下神经网络的基础概念,以及目前业界常用的几种神经网络和适用的场景。详细介绍神经网络并非本博客的主要目标,本博客意在让有兴趣的同学了解一下,然后通过参考链接去进一步的学习。

接下来的几篇博客会总结一下模型的训练和推理,以及引申出的梯度的概念以及损失函数,激活函数的概念。最终目标是实现一个自定义神经网络,有体感的去训练和推理模型,达到解决实际问题的目标。

end

相关推荐
新加坡内哥谈技术17 分钟前
Mistral推出“Le Chat”,对标ChatGPT
人工智能·chatgpt
GOTXX25 分钟前
基于Opencv的图像处理软件
图像处理·人工智能·深度学习·opencv·卷积神经网络
捂月29 分钟前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
IT古董30 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
CV学术叫叫兽1 小时前
快速图像识别:落叶植物叶片分类
人工智能·分类·数据挖掘
瓜牛_gn1 小时前
依赖注入注解
java·后端·spring
WeeJot嵌入式1 小时前
卷积神经网络:深度学习中的图像识别利器
人工智能
Estar.Lee1 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
喜欢猪猪1 小时前
Django:从入门到精通
后端·python·django
一个小坑货1 小时前
Cargo Rust 的包管理器
开发语言·后端·rust