聊聊神经网络的基础知识

聊聊,神经网络,基础知识 · 浏览次数 : 304

小编点评

**Numpy框架** Numpy 是一个用于计算数组的 Python 库。它提供了多种数据结构和算法,可以用于各种数据科学任务。 **TensorFlow框架** TensorFlow 是一个用于构建和训练神经网络的 Python 库。它提供了一系列工具,可以用于创建和训练神经网络模型。 **PyTorch框架** PyTorch 是一个用于构建和训练神经网络的 Python 库。它提供了一系列工具,可以用于创建和训练神经网络模型。 **其他框架** 除了 Numpy、TensorFlow 和 PyTorch 之外,还有其他一些用于计算张量或基于张量的 Python 库,包括 NumPy、Matplotlib、Scikit-learn、Seaborn 等。

正文

来自《深度学习入门:基于Python的理论与实现》

张量

Numpy、TensorFlow、Pytorch等框架主要是为了计算张量或是基于张量计算。
标量:0阶张量;12,4,3,
向量:一阶张量;[12,4,3]
矩阵:二阶张量;[ [12,4,3], [11,2,3] ]
多阶张量:多维数组;
可以将张量的阶度理解为多维数组的维度。

神经网络

神经网络的图表示:
image.png
最左边的一列称为输入层,最右边的一列称为输出层,中间的称为中间层,也叫做隐藏层。

激活函数

概述

激活函数的作用在于决定如何来激活输入信号的总和。数学表达式如下:
image.png
图表示如下:
1694656494643.png
通常神经元用一个○表示,在明确神经网络的动作下,可以明确显示激活函数的计算过程。如下,这两个图是等效的。
1694656607727.png

sigmoid函数

神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送到下一个神经元。
函数表示为:
1694656704371.png
使用Numpy实现:
1694656974882.png

relu函数

relu函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。函数表示:
image.png
使用Numpy实现:
1694656927363.png

神经网络的实现

如下是三层神经网络的图表示,第0层神经元到第一层神经元的信号传递:
image.png
符号解释:
1694658114340.png
如下表示引入了偏置的神经元"1"。
1694658174534.png
神经元a1的数学表达式如下:
1694658406284.png
矩阵的乘法运算:
1694658784952.png
NumPy实现:
1694658817221.png
image.png

中间层(隐藏层)的激活函数可能是不一样的,如上可能是sigmoid函数或是rule函数计算。

第1层神经元到第二层神经元的信号传递,从下图也可以看出来,第二层到输出层的信号传递:
1694658557743.png

输出层的设计

神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数。

机器学习的问题大致分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。而回归问题是根据某个输入预测一个数值的问题。

Affine层

Affine层(也称为全连接层、线性层或密集层)是一种基本的神经网络层,其主要作用是将输入数据与权重矩阵相乘并添加偏置,以进行线性变换。这个线性变换是神经网络中的重要组成部分,它将输入数据映射到另一个空间,以便后续的非线性变换和学习。这可以用以下数学公式表示:

深度神经网络中,通常会有多个Affine层连接在一起,构成网络的一部分。每个Affine层将前一层的输出作为输入,并且可以具有不同的权重和偏置,以捕捉不同的特征和复杂性。通常,在Affine层之后会添加非线性激活函数(如ReLU、Sigmoid或Tanh),以使神经网络能够捕捉更复杂的模式和特征。这些非线性函数使神经网络能够逼近任意复杂的函数。

恒等函数和softmax函数

恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动的直接输出。神经网络图表示:
1694661935585.png
分类问题中的softmax函数,其数学表达式如下,计算第K个神经元的输出:
1694662010908.png
图表示如下,输出层的各个神经元都受到所有输入信号的影响:
1694662418256.png
softmax函数的python实现:
1694662472541.png
softmax函数的输出是0.0到1.0之间的实数。并且softmax函数的输出值的总和是1。因此可以把softman函数的输出解释为"概率"。
比如在手写数字识别时,Softmax层的输出如下:
1694681296540.png
输入图像经过Affine层与ReLU层进行转换,10个输入通过Softmax层进行正规化。在这个例子中,"0"的得分时5.3,这个值经过Softmax层转换,输出概率为0.008的值;"2"的得分时10.1,被转换为0.991。

损失函数

损失函数标识神经网络性能的"恶劣程度"的指标,即当前的神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。损失函数的计算可以使用均方误差和交叉熵误差。

卷积神经网络

卷积神经网络(CNN)增加了卷积层(Convolution)和池化层(Pooling)。其神经网络结构示例如下:
1694669913021.png
之前的全连接神经网络中忽略了数据的形状,比如,输入数据是图像时,图像通常是高、长、通道三个方向上的3维形状。但是向全连接层输入时,需要将3维数据拉平为1维数据。全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一纬度的神经元)处理,所以无法利用与形状相关的信息。
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接受输入数据,并以3维数据的形式输出至下一层。因此,CNN架构的网络可以正确理解图像等具有形状的数据。

卷积层

卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的"滤波器运算"。如下示例:
1694670765107.png
卷积运算对输入数据应用滤波器。计算顺序如下,卷积运算以一定间隔的步幅滑动滤波器的窗口并应用。如下所示:
image.png
image.png
将各个位置上滤波器的元素与输入的对应元素相乘,然后再求和。最后将结果保存到输出的对应位置。将这个过程在所有的位置运算一遍,就可以得到卷积运算的输出。

3维数据的卷积运算

之前的卷积运算都是以高、长方向的2维形状为对象的。图像是3维数据,除了高、长方向还有通道方向。增加了通道,会按通道进行输入数据与滤波器的卷积运算。如下是增加了通道方向的3维数据进行卷积运算的例子:
1694671256238.png
计算顺序如下:
1694674172472.png
1694674199134.png

池化层

池化是缩小高、长方向上的空间的运算。如下,将2*2的区域集约成1个元素的处理,缩小空间大小。
1694674400161.png

与聊聊神经网络的基础知识相似的内容:

聊聊神经网络的基础知识

来自《深度学习入门:基于Python的理论与实现》 张量 Numpy、TensorFlow、Pytorch等框架主要是为了计算张量或是基于张量计算。 标量:0阶张量;12,4,3, 向量:一阶张量;[12,4,3] 矩阵:二阶张量;[ [12,4,3], [11,2,3] ] 多阶张量:多维数组;

聊聊Transformer和GPT模型

本文基于《生成式人工智能》一书阅读摘要。感兴趣的可以去看看原文。 可以说,Transformer已经成为深度学习和深度神经网络技术进步的最亮眼成果之一。Transformer能够催生出像ChatGPT这样的最新人工智能应用成果。 ## 序列到序列(seq2seq) Transformer能实现的核心

聊聊GLM-4-9B开源模型的微调loss计算

概述 Github官方地址:GLM-4 网上已经有很多关于微调的文章,介绍各种方式下的使用,这里不会赘述。我个人比较关心的是微调时的loss计算逻辑,这点在很多的文章都不会有相关的描述,因为大多数人都是关心如何使用之类的应用层,而不是其具体的底层逻辑,当然咱也说不清太底层的计算。 可了解其它loss

聊聊一个差点被放弃的项目以及近期的开源计划

前言 自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。 关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite) IdentityServerLite 开发这个项目的起因,是

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好,我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库,这个库是专门用来处理 JWT 的,JWT 全称是 JSON Web Token ,JSON 格式的 Token。 今天就来简单入门一下 JWT。 官方介绍:https://jwt.io/introduction

聊聊MySQL是如何处理排序的

在MySQL的查询中常常会用到 order by 和 group by 这两个关键字,它们的相同点是都会对字段进行排序,那查询语句中的排序是如何实现的呢?

聊聊 Linux iowait

哈喽大家好,我是咸鱼。 我们在使用 top 命令来查看 Linux 系统整体 CPU 使用情况的时候,往往看的是下面这一列: %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 68.0 wa, 0.0 hi, 0.0 si, 0.0 st 其中,man 手册解释 w

聊聊Mybatis框架原理

好久没有写博客了。最近工作中封装了一个类似ORM框架的东西。大概的原理就是将Excel数据初始化到本地sqlite数据库后,通过json配置文件,对数据库的数据做增删改查等操作。 其实大概的思考了下,就是半ORM框架mybatis的逻辑,只是我们自己封装的简陋蛮多。想想有现成的轮子没用,反而是自己写

聊聊Spring的工厂方法与FactoryBean

概述 工厂方法是比较常见,常用的一种设计模式。FactoryBean是Spring提供的一种Bean注入IOC容器的方式。 工厂方法 在做日常开发时,一般都会避免直接new对象,而且将new的操作丢给IOC容器,但对于第三方系统的集成,我们不太好直接丢给IOC容器,此时可以通过工厂模式, 提供一个工

聊聊Spring Cloud Alibaba解决方案组件

在java的微服务解决方案中,最先出现目前应用比较多的就是spring cloud netfix系列,但是随着阿里的强劲支持,spring cloud alibaba解决方案逐渐可以替代前者,当然dubbo也是不容小觑的。之前面试几家公司应用的都是spring cloud alibaba,随着我自己