人工神经网络初步

news2024/11/26 22:51:33

        大家好,这里是七七,由于各种比赛的缘故,使用了很多人工神经网络模型。但是很多的原理都不是很明白,就导致了不能灵活地运用┭┮﹏┭┮。为此,去看了些人工神经网络原理书,写下此专题。

在进入正文之前要先说明,本文不是面向小白的(时间不够写那么多基础知识),建议在了解人工智能所需要用到的神经元、函数、梯度、矩阵的基础知识后,再来阅读此篇(这几部分基础知识真的很重要)。


一、MCP模型和感知器

MCP模型

最初的神经网络雏形,实在1943年,美国的科学家提出的MCP模型,这种模型就是模拟了人类的神经元,一个胞体,前面有很多树突输入,每个输入都有相应的权值;胞体也有自己的输出,在输入*权值之和大于某个临界值时,胞体的输出是一种形态(如1),否则就是另一种形态(如0)。至于是那种形态,取决于激活函数的设定,这里采用的是单位阶跃函数。这种就是基本型MCP模型。

之后对于这种模型进行了增强,推出了增强型MCP模型,规定

  • 输出变量可以为任意实数
  • 输入既可以表示同一神经网络中其他神经元的输出,也可以是神经网络的外部输入
  • 激活函数可以为其他的函数形式(如分段线性函数、整流线性函数、软整流函数、S形函数等)

感知器

        人工神经网络一般分为两个阶段,第一个是学习阶段或训练阶段,第二个是运行阶段。学习阶段主要任务是找到合适的决策函数和参数,运行阶段的任务就是通过训练得到的模型来进行识别或预测。

在训练阶段会选择一些数据作为训练集。假设训练集中有两类数据,如果在模式空间中存在一个超平面,可以分开这两类数据,那么就说这两种数据是线性可分的,否则就是非线性可分的。

 1958年,美国心理学家提出了名为Perceptron(感知器)的人工神经网络架构及其训练算法,通过数学证明,得出了这样的结论:对于线性可分的二类识别问题,其训练算法是收敛的。
感知器的架构其实就是单个MCP模型神经元。

这个算法其实和bp神经网络算法很相似,可以看下边的例子,再次不过多做解释

BP神经网络应用案例_bp神经网络案例-CSDN博客

由于说单个的感知器只能解决线性可分的二分类模式问题,为了能够处理多类别处理问题,我们可以把多个感知器并联,就形成了单层感知器。

二、多层感知器(MLP)

        一般来说,一个MLP包含了一个输入层、一个输出层以及若干个隐层。相邻层的神经元之间以单项全互联方式进行连接。

要注意的是,输入神经元并不是真的神经元,它没有激活函数,也没有输入,只有输出。当我们说一个L层MLP时,是指输出层加上若干隐层后一共有L层,输入层是不计入其中的。

数学上可以证明,对于一个L(L>=2)层MLP,如果不限制各隐层神经元的个数,也不限制激活函数的形式,那么只要权值和阈值取值得当,则输出函数可以无限逼近任意一个N元函数。

MLP的训练学习通常是使用监督学习方法,即每一个作为输入的训练样本矢量都带有一个已知的我们所期待的输出矢量,也就是其标签。实际输出与标签的差异为其训练误差,当平均训练误差低于我们设定的某个值时,就说明模型训练成功。

当然,也可能即使训练了很多次,还是没能满足要求,这就说明模型设计上存在缺陷,或者初始的权值和阈值选取不合适,此时应该种植训练,修改初始值或模型再训练。

一般来说,再训练结束后应该还有一个测试阶段,用于测试模型的准确性,满足要求了才会使用,否则就需要修改模型。

BP算法

核心思想就是通过输出值与期望值的差距,通过求输出结果y与每个神经元路径上权值w的偏导数,进行反馈,并沿梯度下降,从而达到反馈的效果。

此算法的案例在下文已经讲过,本文我们来探讨一些细节内容。

BP神经网络应用案例_bp神经网络案例-CSDN博客

  • bp算法要求激活函数是处处可导的,还需要有大量的数据且两个相同的样本标签必须相同。
  • 初始值应该取绝对值较小的不同的随机值。
  • 由于计算机的计算方式在本质上只能是离散的,所以在计算机上无法实现严格意义上的梯度下降算法,当BP算法的学习率η趋于0时,BP算法才能时梯度算法。
  • 由于是梯度算法,所以可能最终结果为局部最优解,要避免这种情况,可以配合模拟退火算法、遗传算法、噪声注入算法等来使用。
  • 学习率的选取也有讲究,建议越靠近输入层η越大,越靠近输出层η越小;训练初期η取较大值,后期取较小值等等。
  • 容量可以理解为神经元与隐含层的数量,容量越大,越容易发生过拟合。因此如果发生过拟合,可尝试减小容量。
  • 若误差容限设置的过小,收敛便会很困难,很可能导致过度训练,使得MLP过于在意一些无关紧要的细枝末节,导致效果较差。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Delta lake with Java--数据增删改查

之前写的关于spark sql 操作delta lake表的,总觉得有点混乱,今天用Java结合真实的数据来进行一次数据的CRUD操作,所涉及的数据来源于Delta lake up and running配套的 GitGitHub - benniehaelen/delta-lake-up-and-running: Companion reposi…

Mac idea gradle解决异常: SSL peer shut down incorrectly

系统:mac 软件:idea 解决异常: SSL peer shut down incorrectly 查看有没有安装 gradle -v安装 根据项目gradle提示安装版本 brew install gradle7idea的配置 在settings搜索gradle,配置Local installation,选择自己的安装目录…

Unity Shader中获取像素点深度信息

1.顶点着色器中对深度进行计算 v2f vert(appdata v) {v2f o;o.pos UnityObjectToClipPos(v.vertex);o.uv TRANSFORM_TEX(v.uv, _MainTex);o.depth (o.pos.z / o.pos.w 1.0) * 0.5; // Normalize depth to [0, 1]return o; }但是达不到预期,最后返回的值一直大于…

连通“数据”,让制造变“聪明”

说起数据智能,你第一时间想到的是什么呢?是科技感十足的智慧城市?还是炫酷的人工智能景象? 数据作为企业的战略资产越来越受到重视,从最初的数据协助业务协同,转化为数据驱动业务,数据驱动运营…

Hive两代命令行客户端(Hive、Beeline)

Hive命令行客户端 Hive有两个主要的客户端工具,分别是旧版的Hive CLI(Command Line Interface)和新版的Beeline。 Hive CLI: Hive CLI 是 Hive 最早期的命令行客户端工具,它使用 JDBC 连接到 Hive 服务器,…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题: 1.有效的括号 题目: 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合…

深入剖析Tomcat(七) 日志记录器

在看原书第六章之前,一直觉得Tomcat记日志的架构可能是个“有点东西”的东西。在看了第六章之后呢,额… 就这?不甘心的我又翻了翻logback与新版tomcat的源码,额…,日志架构原来也没那么神秘。本篇文章先过一遍原书内容…

为什么会查询不到DNS信息?怎么排查?

DNS(域名系统)是将域名转换为相应 IP 地址的关键系统。查询 DNS 信息具有重要作用,通过查询 DNS 信息,我们可以知道域名对应的 IP 地址,这是最主要的信息,使设备能与目标服务器进行通信;其次是域…

网络 IO 模式

同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时,需要等待操作完成后才能继续执行后面的程序。这种模式下,当程序使用阻塞式 IO 时,会一直等待IO操作完成,程序会暂停执行…

Python中设计注册登录代码

import hashlib import json import os import sys # user interface 用户是界面 UI """ 用户登录系统 1.注册 2.登陆 0.退出 """ # 读取users.bin def load(path): return json.load(open(path, "rt")) # 保存user.bin def save(dic…

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

文章目录 前言NvDataInterfaceNvBlockNvM配置SWC配置RTE Mapping使用生成的接口操作NVM总结前言 NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断…

ETLCloud工具怎么实现多流SQL实时运算?

多流SQL实时运算的特点和应用场景 多流SQL实时运算是一种先进的数据处理技术,它在大数据处理领域中扮演着至关重要的角色,尤其是在需要对多个数据流进行实时分析和处理的应用场景中。该技术结合了SQL(结构化查询语言)的易用性和流…

15.计算机网络

1.物理层的互联设备 中继器 和 集线器 2.集线器可以看做特殊的多路中继器 集线器 不可以做到自动寻址的功能 3.数据链路层 网桥 和 交换机 4.交换机是多端口网桥 5.网络层 路由器 6.应用层 网关 7.广播域 网络层 可以形成多个广播域 冲突域 网络层数据链路层 可以形成多个冲突域…

matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量异常样本检验 V2.0

简介 拉依达检验法(3σ准则)是一种统计学方法,用于检测数据中的异常值。这种方法基于正态分布的特性来确定数据点是否可能是异常值。以下是关于拉依达检验法(3σ准则)的详细介绍: 基本原理: 拉…

分布式锁概述

什么是分布式锁 分布式锁是一种在分布式计算环境中用于同步访问共享资源的机制。它的主要目的是在一个分布式系统中,当多个进程或服务需要同时访问同一个资源时,确保任一时刻只有一个进程或服务能够执行涉及该资源的关键操作。这类似于传统单体应用中的…

C语言判断字符旋转

前言 今天我们使用c语言来写代码来实现字符串选择的判断,我们来看题目 题目描述 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 AABCD和s2 BCDAA,返回1 给定s1abcd和s2ACBD,返回0. A…

【分治算法】【Python实现】快速排序

文章目录 [toc]Python实现时间复杂性最坏时间复杂性最好时间复杂性平均时间复杂性 个人主页:丷从心 系列专栏:分治算法 学习指南:算法学习指南 Python实现 def partition(arr, low, high):pivot arr[low]# 将 pivot 元素移动到列表的最右…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部,我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false,固定页面不会因为键盘弹出而移动 效果图如下

OFD(Open Fixed-layout Document)

OFD(Open Fixed-layout Document) ,是由工业和信息化部软件司牵头中国电子技术标准化研究院成立的版式编写组制定的版式文档国家标准,属于中国的一种自主格式,要打破政府部门和党委机关电子公文格式不统一,以方便地进行电子文档的…

pwn学习(一)

pwn:二进制漏洞挖掘与利用(程序里面的漏洞) CTF中的Pwn是仅保留漏洞代码和基本逻辑的二进制程序,选手通过自身对漏洞的熟悉程度来快速的在逆向分析中找到漏洞点,并且结合自身对漏洞利用的熟悉程度来编写EXP脚本,从而获…