聊聊神经网络的基础知识

聊聊,神经网络,基础知识 · 浏览次数 : 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能实现的核心

聊聊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,随着我自己

聊聊Spring Cloud Alibaba Sentinel的限流

Spring Cloud Alibaba Sentinel限流功能概览,目前先整理一版,东西有点多,想慢慢打开;后续继续更新......

聊聊RabbitMQ消息队列

消息队列的应用可以说是业务必备的。从功能来说,解耦、异步化、延迟队列、削峰等等;在之前的项目中就用到了rabbitmq来实现消息中心、业务的异步解耦。我个人很推从的就是业务的异步解耦能力。当时的业务场景是客户在界面上可以批量提交数据,但是服务端要做校验,数据处理,入库等等系列操作,其中的校验与数据处

聊聊Nacos框架功能与原理

Nacos的设计有两点很值得参考;首先是注册中心模块,服务状态动态感知是基于HTTP短链接+UDB通信来实现,其实正确来说,应该是基于UDP通信实现客户端与服务端的服务实例列表数据同步,利用http定时任务来做补偿。其次配置中心模块的配置信息动态监听基于HTTP长轮询实现,最大限度的保证了实时性,在

聊聊Spring IOC容器的注入方式

为什么要说这个? 对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。 直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接

聊聊我认为的OpenFeign

此篇文章不从源码角度解析,网上一搜一大把。我个人的习惯是自己评估与思考下大概的设计思路是什么,然后看源码与博客佐证。否则一来就是使用然后看源码,一坨一坨的代码,真的看的头疼。以上仅是个人的学习方法。 聊聊OpenFeign,其实这个框架,之前用过,但没留意太多;说白了这个框架的出现就是为了让我们做R