感知机和神经网络

引入 

什么是神经网络?

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

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

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

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

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

一个可视化的神经网络系统,由多层的神经元组成,为了区分不同的神经层,我们通常将输入信息的叫做输入层,中间传递信息叫做隐藏层或隐层,输出层就是将前面传递的信息形成输出的结果,通过该结果能直接看到计算机对物体的认知,隐层通常由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_deriv
    
        self.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 np

nn = 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))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重写muduo之TcpServer

目录 1、Callbacks.h 2、TcpServer.h 3、TcpServer.cc 1、Callbacks.h 回调操作 #pragma once#include <memory> #include <functional>class Buffer; class TcpConnection;using TcpConnectionPtrstd::shared_ptr<TcpConnection>; using ConnectionCall…

Linux服务器常用巡检命令,查看日志

查看日志 3.1 通过journalctl命令查看系统日志 命令&#xff1a;journalctl 3.2 通过tail查看系统日志 查看日志文件多少行代码&#xff1a;tail -n [行数] [日志文件] 4. 服务状态 4.1 查看指定服务的状态 命令&#xff1a;systemctl status <service> 比如查看防火墙…

小小一区,轻松拿捏!中国学者用各大公共数据库研究明星指标TyG,文章发在同一杂志...

‍ 公共数据库研究热潮来袭&#xff01;中国学者一区连发&#xff0c;表现十分抢眼&#xff01; 作为NHANES数据库以及其他数据库的“明星指标”&#xff0c;甘油三酯-葡萄糖 (TyG) 已经催生很多高质量文章&#xff0c;关于TyG指标的研究&#xff0c;成果多次在一区杂志上发表。…

Python 开发 框架安全:SSTI 模板注入漏洞测试.

什么是 SSTI 模板注入 SSTI (Server-Side Template Injection) 是一种Web应用程序安全漏洞&#xff0c;它发生在应用程序使用模板引擎渲染用户输入时。当应用程序将用户输入直接插入到模板中而不进行充分的过滤和验证时&#xff0c;就可能导致SSTI漏洞。攻击者可以利用这个漏洞…

前端笔记-day03

文章目录 01-初始CSS02-CSS引入方式03-标签选择器04-类选择器05-id选择器06-通配符选择器07-画盒子08-字体大小09-文字粗细10-字体倾斜11-行高12-行高垂直居中13-字体族14-font复合属性15-文本缩进16-文本对齐方式17-图片对齐方式18-文本修饰线19-文字颜色20-调试工具21-综合案…

网络Http和Socket通讯(基于面试)

每日一句&#xff1a;想得到世上最好的东西&#xff0c;先得让世界看到最好的你 目录 面试问OSI或TCP/IP,怎么回答&#xff1f; 面试问HTTP&#xff1f; 面试问Get类型&#xff0c;Pot类型区别&#xff1f; 面试什么是Socket套接字&#xff1f; 面试问什么是数据粘包&…

如何清除DNS缓存,刷新DNS

大家在使用域名访问服务器的时候&#xff0c;经常会遇到一个问题&#xff0c;同一个局域网里的两台电脑&#xff0c;一台可以访问而另一台不行。这是为什么呢&#xff1f;这里我要和大家说下DNS缓存的问题&#xff0c;顾名思义&#xff0c;每台电脑都有DNS缓存&#xff0c;在域…

[python:django]:web框架搭建项目

文章目录 pip查看安装列表安装制定Django版本初始化django项目执行 python manage.py startapp projectName 生成app应用执行 python manage.py runserver 运行web项目配置django项目页面访问地址注意&#xff1a;再次访问地址&#xff0c;返回制定页面 pip查看安装列表 C:\Us…

Springboot+logback 详细配置

一、添加依赖 这里使用springboot3.0.2 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.projectlombok</grou…

2024蓝桥杯RSA-Theorem

方法1&#xff1a;直接使用工具yafu解题 yafu的使用方法 安装&#xff1a;解压后直接使用即可&#xff0c;在文件包内&#xff0c;执行命令终端&#xff0c;输入命令行 1、如果数比较小&#xff0c;进入该文件的目录后可以直接使用: yafu-x64 factor(n) 如果是powershell&…

刷代码随想录有感(63):将有序数组转换为二叉搜索树(其实时二叉平衡搜索树)

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(vector<int>& nums, int left, int right){if(left > right)return NULL;int mid left (right - left)/2;TreeNode* NewRoot new TreeNode(nums[mid]);NewRoot->left tra…

怎么做自己的网站

现如今&#xff0c;拥有自己的网站已经成为现代生活中的一种标志。无论是个人博客、在线商店还是企业官网&#xff0c;都可以通过拥有一个网站来展示自己的个性、产品或服务。在这篇文章中&#xff0c;我将分享如何创建和管理自己的网站。 首先&#xff0c;你需要选择一个合适的…

用户登录:断点看流程认证

参考原文Security认证流程 第一步:先认识一下令牌 开始断点 执行new UsernamePasswordAuthenticationToken 1.Authentication接口: 它的实现类&#xff0c;表示当前访问系统的用户&#xff0c;封装了用户相关信息。(我们实现类是UsernamePasswordAuthenticationToken) 点击…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑微电网联盟协调运行的用户侧共享储能多计费方式博弈定价方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

LVDS 接口标准和规范

低压差分信号具有传输速率快、抗干扰性强的特点&#xff0c;是现在广泛应用的数据接口标准之一。Xilinx FPGA支持LVDS电平标准&#xff0c;并提供了动态相位调整解决方案&#xff0c;解决了基于LVDS源同步传输时存在的数据偏斜问题。 1 LVDS 技术规范简介 随着接口和背板信号…

万物互联-AI边缘计算赋能腾讯无人驾驶车

为把握智能交通系统发展机遇&#xff0c;探索未来城市智能化交通体系&#xff0c;今年3月&#xff0c;腾讯无人驾驶汽车正式落地深圳智能网联交通示范区&#xff1b;该项目将以智能网联测试为基础,以构建自动驾驶生态和未来交通体系为导向&#xff0c;围绕"车、路、云、网…

MATLAB的Bar3函数调节渐变色(内附渐变色库.mat及.m文件免费下载链接)

一. colormap函数 可以使用colormap函数&#xff1a; t1[281.1,584.6, 884.3,1182.9,1485.2; 291.6,592.6,896,1197.75,1497.33; 293.8,596.4,898.6,1204.4,1506.4; 295.8,598,904.4,1209.0,1514.6];bar3(t1,1) set(gca,XTickLabel,{300,600,900,1200,1500},FontSize,10) set…

Stable Diffusion是什么?

目录 一、Stable Diffusion是什么&#xff1f; 二、Stable Diffusion的基本原理 三、Stable Diffusion有哪些运用领域&#xff1f; 一、Stable Diffusion是什么&#xff1f; Stable Diffusion是一个先进的人工智能图像生成模型&#xff0c;它能够根据文本描述创造出高质量的图…

物流EDI:GEFCO EDI 需求分析

GEFCO专注于汽车物流领域近70年&#xff0c;是欧洲整车市场的物流供应商&#xff0c;也是欧洲十大领先的运输和物流集团之一。GEFCO的业务遍及六大洲&#xff0c;业务覆盖150个国家&#xff0c;在全球拥有庞大的员工队伍&#xff0c;在全球汽车行业的挑战中茁壮成长。为汽车制造…

【c++】set、map用法详解

set、map用法详解 1. 关联式容器2. 键值对2.1 &#xff1a;pair2.2&#xff1a;make_pair 3. 树形结构的关联式容器3.1&#xff1a;set构造函数find()erase()insert()count()lower_bound()upper_bound() 3.2&#xff1a;multiset3.3&#xff1a;map构造函数insert()operator[] …