感知机和神经网络

引入 

什么是神经网络?

我们今天学习的神经网络,不是人或动物的神经网络,但是又是模仿人和动物的神经网络而定制的神经系统,特别是大脑和神经中枢,定制的系统是一种数学模型或计算机模型,神经网络由大量的人工神经元连接而成,大多数时候人工神经网络能够在外界信息的基础上改变内部结构,是一种自适应的改变的过程,现代的神经网络是一种基于传统统计学的建模工具,常用来对输入和输出之间复杂的关系进行建模或者探索数据之间的模式

人或动物的神经元如下,当人感受到刺激的时候,信号会通过传道部传递信号,最后会作用在效应部做出相应的反应。神经网络是一种运算模型,有大量的节点,神经元节点之间构成了联系,这些神经元负责传递信息和加工信息,神经元可以被训练和强化,形成一种固定的形态,对一些特殊的信息会有更强烈的反应。

这张图片是一张古风女士的图片,因为在我们的生活中的经验已经告诉我们人的模样,椅子的样子,衣服的模样。

所以通过我们强大的成熟的视觉神经系统判定她是一个古风女孩。

计算机系统和人脑一样,也是通过不断训练,告诉计算机那些是猫,那些是狗,会通过一个数学模型来得到结果。比如:百度图片搜索就能识别图片的物体,地点以及其他信息,都归功于计算机神经系统的突破发展。

一个可视化的神经网络系统,由多层的神经元组成,为了区分不同的神经层,我们通常将输入信息的叫做输入层,中间传递信息叫做隐藏层或隐层,输出层就是将前面传递的信息形成输出的结果,通过该结果能直接看到计算机对物体的认知,隐层通常由1层或多层组成,负责输入层的加工信息的处理,类似于人类的神经系统,通过多层的神经加工才能达到最后的效果。


 一个可视化的神经网络系统,由多层的神经元组成,为了区分不同的神经层,我们通常将输入信息的叫做输入层,中间传递信息叫做隐藏层或隐层,输出层就是将前面传递的信息形成输出的结果,通过该结果能直接看到计算机对物体的认知,隐层通常由1层或多层组成,负责输入层的加工信息的处理,类似于人类的神经系统,通过多层的神经加工才能达到最后的效果。

现在的深度学习就是从神经网络发展而来,当神经网络中间的隐层非常之多的时候可处理的信息也会非常之多,这也是叫深度神经网络的原因。当隐藏层只有1个时候,是神经网络中的“BP神经网络”模型,而没有隐层,只有输入输出层的是最简单的“感知机”分类模型。

  • 感知机由输入层和输出层组成,没有隐藏层。它接收多个输入信号,通过加权求和后,如果超过某个阈值,则输出一个信号,这种结构使其成为一个线性分类器。
  • 感知机通过错误修正算法来更新权重。当模型做出错误预测时,它会调整权重以减少未来的错误。

感知机作为神经网络的基础,虽然简单,但为理解更复杂的神经网络模型提供了重要的起点。 

通常计算机能看到的和处理的和人类会有很大的不同,比如图片和声音、文字,他们在计算机中均已0或1的方式存在再神经网络中,通过对这一些0-1数字的加工和处理生成另外一些数字,而生成的数字也有了物理上的意义了。


神经网络训练的过程

首先,需要准备大量的数据集,进行上千万次的训练,但是计算机不一定能识别正确,比如一张图原来是猫的被识别成了狗,虽然识别错误了,但是这个错误是非常有价值的,我们可以从这次错误中总结和学习经验,计算机一般是根据正确的答案和预测的答案做对比产生一个差别,在将这个差别反向传递回去,每一个神经元往正确的方向上改动一点点,这样下一次识别的时候,通过已经改进的神经网络识别的正确率会提高一些,将每次一点点的提高加上上千万次的训练,最终的识别效果也就被提高了,最后到了验收结果的时候原来是猫现在也被识别为猫。

计算机中的每个神经元都有属于他的激励函数,我们可以利用这些函数给计算机一个刺激行为。

当第一次给计算机看猫的图片的时候,只有部分神经元被激励或激活,被激活的神经元会传递给下一级别的神经元,这些传递的信息也是计算机中最为重要的信息,也就是对输出结果最优价值的信息,如果预测成了狗狗,那么神经元的一些参数就会被调整,有一些神经元变得迟钝,有一些则变得敏感起来,这就说明所有神经元参数都在被改变,往识别正确的方向去改变了,被改动的参数也能逐渐的预测出正确的答案,这就是神经网络的过程。   

感知机

感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,学习能力非常有限,感知机的学习皆在求将训练数据进行线性划分的分离超平面。为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。 

激励函数


BP神经网络

BP中采用的梯度求解最优参数的方法是最常用的方法,但是如果误差函数在当前点的梯度为0,已达到了局部最小,更新量将为0,这意味着迭代将会停止,但此时如果误差函数仅仅有一个局部的最小,那么此时的局部最小将变为全局最小;如果误差函数有多个局部最小,则不能保证找到的解释全部最小,这种情形也是参数陷入局部最小的情况。

  1. 以不同的参数值初始化多个网络,按不同方法标准化训练后,取最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部最小,从中选择可能更接近全局最小的结果。
  2. 使用“模拟退火”技术在每一步都以一定的概率接受比当前更差的结果,从而有助于跳出局部最小。在每次迭代的过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法的稳定性。

  3. 使用随机梯度下降。与标准的梯度下降算法精确计算梯度不同。随机梯度下降法在计算梯度的时候加入了随机因素。即便陷入了局部最小值点,它计算的梯度仍不可能为0,这样就跳出了局部最小搜索。

梯度下降法

找到一个抛物线的最低点:

首先求导,令导数为0,求值。l为学习率,为(0,1]的值,设置的小,需要很长时间才能到最低点。设置的大,可能错过最低点。一般设置的时候首先设置的大一些,等到快接近最低点步子放慢一些。

import numpy as np
def tanh(x):  return np.tanh(x)def tanh_deriv(x):  return 1.0 - np.tanh(x)*np.tanh(x)def logistic(x):  return 1/(1 + np.exp(-x))def logistic_derivative(x):  return logistic(x)*(1-logistic(x))class NeuralNetwork:   def __init__(self, layers, activation='tanh'):  """  :param layers: A list containing the number of units in each layer.Should be at least two values  :param activation: The activation function to be used. Can be"logistic" or "tanh"  """  if activation == 'logistic':  self.activation = logistic  self.activation_deriv = logistic_derivative  elif activation == 'tanh':  self.activation = tanh  self.activation_deriv = tanh_derivself.weights = []  for i in range(1, len(layers) - 1):  self.weights.append((2*np.random.random((layers[i - 1] + 1, layers[i] + 1))-1)*0.25)  self.weights.append((2*np.random.random((layers[i] + 1, layers[i + 1]))-1)*0.25)     def fit(self, X, y, learning_rate=0.2, epochs=10000):         X = np.atleast_2d(X)         temp = np.ones([X.shape[0], X.shape[1]+1])         temp[:, 0:-1] = X  # adding the bias unit to the input layer         X = temp         from NeuralNetwork import NeuralNetwork
import numpy as npnn = NeuralNetwork([2,2,1], 'tanh')     
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])     
y = np.array([0, 1, 1, 0])     
nn.fit(X, y)     
for i in [[0, 0], [0, 1], [1, 0], [1,1]]:    print(i, nn.predict(i))

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

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

相关文章

图像处理:图像噪声添加

文章目录 前言一、高斯噪声二、椒盐噪声三、泊松噪声四、斑点噪声五、指数噪声六、均匀噪声总结 前言 本文主要介绍几种添加图像噪声的方法,用于数据增强等操作。 以下图为例。 一、高斯噪声 高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调…

vLLM初探

vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架,旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM是一个快速且易于使用的库,用于 LLM 推理和服务,可以和HuggingFace 无缝集成。vLLM利用了全新的注意力算法「Page…

Python+PySpark数据计算

1、map算子 对RDD内的元素进行逐个处理,并返回一个新的RDD,可以使用lambda以及链式编程,简化代码。 注意:再python中的lambda只能有行,如果有多行,要写成外部函数;(T)-&…

train_gpt2_fp32.cu - cudaCheck

源码 // CUDA error checking void cudaCheck(cudaError_t error, const char *file, int line) {if (error ! cudaSuccess) {printf("[CUDA ERROR] at file %s:%d:\n%s\n", file, line,cudaGetErrorString(error));exit(EXIT_FAILURE);} }; 解释 该函数用于检查CU…

无人机路径规划:基于鲸鱼优化算法WOA的复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、部分代码 close all clear clc rng(default); %% 载入数据 data.S[50,950,12]; %起点位置 横坐标与纵坐标需为50的倍数 data.E[950,50,1]; %终点点位置 横坐标与纵坐标需为50的倍数 data.Obstaclexlsread(data1.xls); data.numObstacleslength(data.Obstacle(:,1)); …

TypeError: can only concatenate str (not “int“) to str

TypeError: can only concatenate str (not "int") to str a 窗前明月光,疑是地上霜。举头望明月,低头思故乡。 print(str_len len(str_text) : len(a)) 试图打印出字符串 a 的长度,但是在 Python 中拼接字符串和整数需要使用字符…

【微服务】spring aop实现接口参数变更前后对比和日志记录

目录 一、前言 二、spring aop概述 2.1 什么是spring aop 2.2 spring aop特点 2.3 spring aop应用场景 三、spring aop处理通用日志场景 3.1 系统日志类型 3.2 微服务场景下通用日志记录解决方案 3.2.1 手动记录 3.2.2 异步队列es 3.2.3 使用过滤器或拦截器 3.2.4 使…

triton编译学习

一 流程 Triton-MLIR: 从DSL到PTX - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/671434808Superjomns blog | OpenAI/Triton MLIR 迁移工作简介https://superjom

基于STM32单片机的环境监测系统设计与实现

基于STM32单片机的环境监测系统设计与实现 摘要 随着环境污染和室内空气质量问题的日益严重,环境监测系统的应用变得尤为重要。本文设计并实现了一种基于STM32单片机的环境监测系统,该系统能够实时监测并显示室内环境的温湿度、甲醛浓度以及二氧化碳浓…

新iPadPro是怎样成为苹果史上最薄产品的|Meta发布AI广告工具全家桶| “碾碎一切”,苹果新广告片引争议|生成式AI,苹果倾巢出动

Remini走红背后:AI生图会是第一个超级应用吗?新iPadPro是怎样成为苹果史上最薄产品的生成式AI,苹果倾巢出动Meta发布AI广告工具全家桶,图像文本一键生成解放打工人苹果新iPadPro出货量或达500万台,成中尺寸OLED发展关键…

8、QT——QLabel使用小记2

前言:记录开发过程中QLabel的使用,持续更新ing... 开发平台:Win10 64位 开发环境:Qt Creator 13.0.0 构建环境:Qt 5.15.2 MSVC2019 64位 一、基本属性 技巧:对于Qlabel这类控件的属性有一些共同的特点&am…

QToolButton的特殊使用

QToolButton的特殊使用 介绍通过QSS取消点击时的凹陷效果点击时的凹陷效果通过QSS取消点击时的凹陷效果 介绍 该篇文章记录QToolButton使用过程中的特殊用法。 通过QSS取消点击时的凹陷效果 点击时的凹陷效果 通过QSS取消点击时的凹陷效果 #include <QToolButton> #i…

【深耕 Python】Quantum Computing 量子计算机(5)量子物理概念(二)

写在前面 往期量子计算机博客&#xff1a; 【深耕 Python】Quantum Computing 量子计算机&#xff08;1&#xff09;图像绘制基础 【深耕 Python】Quantum Computing 量子计算机&#xff08;2&#xff09;绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…

ios 开发如何给项目安装第三方库,以websocket库 SocketRocket 为例

1.brew 安装 cococapods $ brew install cocoapods 2、找到xcode项目 的根目录&#xff0c;如图&#xff0c;在根目录下创建Podfile 文件 3、在Podfile文件中写入 platform :ios, 13.0 use_frameworks! target chat_app do pod SocketRocket end project ../chat_app.x…

Python实战开发及案例分析(18)—— 逻辑回归

逻辑回归是一种广泛用于分类任务的统计模型&#xff0c;尤其是用于二分类问题。在逻辑回归中&#xff0c;我们预测的是观测值属于某个类别的概率&#xff0c;这通过逻辑函数&#xff08;或称sigmoid函数&#xff09;来实现&#xff0c;该函数能将任意值压缩到0和1之间。 逻辑回…

【linux】详解linux基本指令

目录 cat more less head tail 时间 cal find grep zip/unzip tar bc uname –r 关机 小编一共写了两篇linux基本指令&#xff0c;这两篇涵盖了大部分初学者的必备指令&#xff0c;这是第二篇&#xff0c;第一篇详见http://t.csdnimg.cn/HRlVt cat 适合查看小文…

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…

从头理解transformer,注意力机制(下)

交叉注意力 交叉注意力里面q和KV生成的数据不一样 自注意力机制就是闷头自学 解码器里面的每一层都会拿着编码器结果进行参考&#xff0c;然后比较相互之间的差异。每做一次注意力计算都需要校准一次 编码器和解码器是可以并行进行训练的 训练过程 好久不见输入到编码器&…

docker部署springboot+Vue项目

项目介绍&#xff1a;后台springboot项目&#xff0c;该项目环境mysql、redis 。前台Vue&#xff1a;使用nginx反向代理 方法一&#xff1a;docker run 手动逐个启动容器 1.docker配置nginx代理 将vue项目打包上传到服务器上。创建文件夹存储数据卷&#xff0c;html存放打包…

计算机网络实验1:交换机基本配置管理

实验目的和要求 安装Packer Tracer&#xff0c;了解Packer Tracer的基本操作掌握交换机基本命令集实验项目内容 认识Packet Tracer软件 交换机的基本配置与管理 交换机的端口配置与管理 交换机的端口聚合配置 交换机划分Vlan配置 实验环境 硬件&#xff1a;PC机&#x…