深度学习,神经网络介绍

chatgpt/2023/9/27 17:24:04

目录

1.神经网络的整体构架

2.神经网络架构细节

3.正则化与激活函数

4.神经网络过拟合解决方法

1.神经网络的整体构架

 

ConvNetJS demo: Classify toy 2D data

我们可以看看这个神经网络的网站,可以用来学习。

神经网络的整体构架如下1:

  1. 感知器(Perceptron)感知器是所有神经网络中最基本的,也是更复杂的神经网络的基本组成部分。它只连接一个输入神经元和一个输出神经元。

  2. 前馈(Feed-Forward)网络前馈网络是感知器的集合,其中有三种基本类型的层:输入层、隐藏层和输出层。在每个连接过程中,来自前一层的信号被乘以一个权重,增加一个偏置,然后通过一个激活函数。前馈网络使用反向传播迭代更新参数,直到达到理想的性能。

  3. 残差网络(Residual Networks/ResNet深层前馈神经网络的一个问题是所谓的梯度消失,即当网络太深时,有用的信息无法在整个网络中反向传播。当更新参。

对于神经网络的整体构架,我们总结为四点:层次结构、神经元、全连接和非线性。

 

层次结构

由上图不难看出,在神经网络中神经网络的我们一般分成三个部分:

1:输入层(input layer)

2:隐藏层(hidden layer)

3:输出层(output layer)

ps:要注意的是,中间的隐藏层可以有多层。

神经元

每个层次中都有许多圆圆的球似的东西,这个东西就是在神经网络中的神经元,就是数据的量或者是矩阵的大小,每一种层次中的神经元中的含量不太一样。

在输入层中的每一个神经元里面是你输入原始数据(一般称为X)的不同特征,比如x为一张图片,这张图片的像素是32323,其中的每一个像素都是它的特征吧,所以有3072个特征对应的输入层神经元个数就是3072个,这些特征以矩阵的形式进行输入的。我们举个例子比如我们的输入矩阵为1*3072(第一维的数字表示一个batch(batch指的是每次训练输入多少个数据)中有多少个输入;第二维数字中的就是每一个输入有多少特征。)

在隐藏层中的每一层神经元表示对x进行一次更新的数据,而每层有几个神经元(比如图中hidden1层中有四个神经元)表示将你的输入数据的特征扩展到几个(比如图中就是四个),就比如你的输入三个特征分别为年龄,体重,身高,而图中hidden1层中第一个神经元中经过变换可以变成这样‘年龄0.1+体重0.4+身高0.5’,而第二个神经元可以表示成‘年龄0.2+体重0.5+身高0.3’,每一层中的神经元都可以有不同的表示形式。

在输出层中的的神经元个数主要取决于你想要让神经网络干什么,比如你想让它做一个10分类问题,输出层的矩阵就可以是’1*10’的矩阵(第一维表示的与输入层表示数字相同,后面10就是10种分类)。

全连接

我们看到的每一层和下一层中间都有灰色的线,这些线就被称为全连接(因为你看上一层中每个神经元都连接着下一层中的所有神经元),而这些线我们也可以用一个矩阵表示,这个矩阵我们通常称为‘权重矩阵’,用大写的W来表示(是后续我们需要更新的参数)。 权重矩阵W的维数主要靠的是上一层进来数据的输入数据维数和下一层需要输入的维数,可以简单理解为上有一层有几个神经元和下一层有几个神经元,例如图中input layer中有3个神经元,而hidden1 layer中有4个神经元,中的W的维度就为‘3*4’,以此类推。(主要是因为我们全连接层的形式是矩阵运算形式,需要满足矩阵乘法的运算法则。

非线性

非线性(non-linear),即 变量之间的数学关系,不是直线而是曲线、曲面、或不确定的属性,叫非线性。非线性是自然界的复杂性的典型性质之一;与线性相比,非线性更接近客观事物性质本身,是量化研究认识复杂知识的重要方法之一;凡是能用非线性描述的关系,通称非线性关系。

2.神经网络架构细节

整体构架

基础构架:f=W2max(0, W1x)

继续堆加一层:f=W3max(0, W2max(0,W1x))

神经网络的强大之处在于用更多的参数来拟合复杂的数据。

神经元个数对结果的影响

改之前的:

layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:, activation: 'tanh'});
layer_defs.push({type:'fc', num_neurons:2, activation: 'tanh'});
layer_defs.push({type:'softmax', num_classes:2});
​
net = new convnetjs.Net();
net.makeLayers(layer_defs);
​
trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.1, batch_size:10, l2_decay:0.001});

 

layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:2, activation: 'tanh'});
layer_defs.push({type:'fc', num_neurons:2, activation: 'tanh'});
layer_defs.push({type:'softmax', num_classes:2});
​
net = new convnetjs.Net();
net.makeLayers(layer_defs);
​
trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.1, batch_size:10, l2_decay:0.001});

改成2以后的图样

然后神经个数调为5以后的样子:

layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:5, activation: 'tanh'});
layer_defs.push({type:'fc', num_neurons:5, activation: 'tanh'});
layer_defs.push({type:'softmax', num_classes:2});
​
net = new convnetjs.Net();
net.makeLayers(layer_defs);
​
trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.1, batch_size:10, l2_decay:0.001});

 

3.正则化与激活函数

正则化的作用

机器学习中经常会在损失函数中加入正则项,称之为正则化(Regularize)。防止模型过拟合,也就是说,在损失函数上加上某些规则(限制),缩小解空间,从而减少求出过拟合解的可能性。

激活函数

常用的激活函数有Sigmoid,Relu,Tanh等,进行相应的非线性变换

 

激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。

学高等数学的时候,在不定积分那一块,有个画曲为直思想来近似求解。那么,我们可以来借鉴一下,用无数条直线去近似接近一条曲线。

4.神经网络过拟合解决方法

参数初始化

参数初始化是很重要的,通常我们都适用随机策略来进行参数初始化

W = 0.01 * np.random.randn(D, H)

数据预处理

不同的处理结果会使得模型的效果发生很大的差异

 

DROP-OUT

这就是传说中的七伤拳

过拟合是神经网络中一个令人非常头疼的大问题

  1. 一种含义是:在机器学习中,是解决模型过拟合问题的策略。

  2. 另一种含义是:是dropout技术的实现,让每一层网络的输出被随机选择丢弃一些神经元,这样可以防止梯度消失和爆炸的问题,有助于提升整个网络的泛化能力。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314802.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕设 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉…

AD21 PCB设计的高级应用(七)盲埋孔的设置

(七)盲埋孔的设置 1.盲埋孔的设置2.Pad/Via模板的使用 1.盲埋孔的设置 随着目前便携式产品的设计朝着小型化和高密度的方向发展,PCB的设计难度也越来越大,对 PCB 的生产工艺提出了更高的要求。在目前大部分的便携式产品中 0.65mm间距以下 BGA封装均使用…

[TWAS]individual-level implementation of PrediXcan(实现PrediXcan)

引言 在下文中,我们将重点讨论PrediXcan的个人级实现。 该方法最初是在这个存储库中实现的。但是,维护和新特性很难实现,因此我们重新实现了该方法,以便与最新的MetaXcan特性集成。 PrediXcan包括两个步骤: 在具有可用基因型的队…

AcWing110. 防晒

输入样例&#xff1a; 3 2 3 10 2 5 1 5 6 2 4 1输出样例&#xff1a; 2 解析&#xff1a; 按照右区间排序&#xff0c;优先满足小的。 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N3000; int n,m,cnt[N],x,y,res; struct node{int…

canvas基础使用1【入门教程】

一、介绍 canvas 是 HTML5 新增的一个标签&#xff0c;表示画布 <canvas></canvas> canvas 也是 HTML5 的画布技术&#xff0c;可以通过编码的方式在画布上描绘图像 <html><head>...</head><body><canvas></canvas></bod…

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

分布式异步任务处理组件(四)

基于zookeeper的HA集群设计思路-- 各个节点都可以消费任务&#xff0c;但是由主节点来投票&#xff1b;主节点通过注册zookeeper的临时节点来选举--主节点需要同步从节点的信息正常工作机制--各个节点&#xff08;包括主节点本身&#xff09;在执行任务之前询问主节点&#xf…

使用go与智能合约交互之使用abigen生成合约go文件进行调用

前两篇文章&#xff0c;我们讲解了go如何通过函数选择器、abi调用的方式与智能合约交互&#xff0c;那么有没有一种更加便捷的方式&#xff08;就好像调用预先定义好的方法一样&#xff09;与智能合约交互呢&#xff1f;答案是有的&#xff0c;本章我们就来学习一下如何使用abi…
推荐文章