深度学习-神经网络原理

news2024/9/21 16:40:22

文章目录

  • 神经网络原理
    • 1.单层神经网络
      • 1.1 回归单层神经网络:线性回归
      • 1.2 二分类单层神经网络:sigmoid与阶跃函数
    • 1.3 多分类单层神经网络:softmax回归

神经网络原理

人工神经网络(Artificial Neural Network,ANN),通常简称为神经网络,它是机器学习当中独树一帜的,最强大的强学习器没有之一。
人脑通过构建复杂的网络可以进行逻辑,语言,图像的学习,而传统机器学习算法不具备和人类相似的学习能力。机器学习研究者们相信,模拟大脑结构可以让机器的学习能力更上一层楼,于是人工神经网络算法应运而生,现在基本都简称为”神经网络“。有了神经网络,基于其算法延申出来的机器学习分枝学科——深度学习也从此走入了人们的视野,成为所有让世人惊叹的人工智能技术的根基。在深度学习中,我们使用圆来表示神经元,使用线表示数据流动的方向。

在这里插入图片描述

1.单层神经网络

1.1 回归单层神经网络:线性回归

了解神经网络,可以从线性回归算法开始。线性回归算法是机器学习中最简单的回归类算法,多元线性回归指的就是一个样本有多个特征的线性回归问题。对于一个有个特征的样本 而言,它的回归结果可以写作一个几乎人人熟悉的方程:
z i ^ = b + w 1 x i 1 + w 2 x i 2 + . . . + w n x i n \hat{z_i} = b + w_1x_{i1} + w_2x_{i2} + ... +w_nx_{in} zi^=b+w1xi1+w2xi2+...+wnxin
w w w b b b被统称为模型的参数,其中 b b b被称为截距(intercept),也叫做偏差(bias), w 1   w n w_1~w_n w1 wn被称为回归系数(regression coefficient),也叫作权重(weights)。这个表达式,其实就和我们小学时就无比熟悉的 y = a x + b y = ax+b y=ax+b是同样的性质。其中 y y y是我们的目标变量,也就是标签。

现在假设,我们的数据只有2个特征,则线性回归方程可以写作如下结构:
z ^ = b + x 1 w 1 + x 2 w 2 \hat{z} = b + x_1w_1 + x_2w_2 z^=b+x1w1+x2w2
此时,我们只要对模型输入特征 x 1 x_1 x1 x 2 x_2 x2的取值,就可以得出对应的预测值 z ^ \hat{z} z^ 。在上一节中我们提到,神经网络的预测过程是从神经元左侧输入特征,让神经元处理数据,并从右侧输出预测结果。这个过程和我们刚才说到的线性回归输出预测值的过程是一 致的。如果我们使用一个神经网络来表达线性回归上的过程,则可以有:

在这里插入图片描述

在神经网络中,竖着排列在一起的一组神经元叫做“一层网络”,所以线性回归的网络直观看起来有两层,两层神经网络通过写有参数的线条相连。我们从左侧输入常数 1 1 1和特征取值 x 1 x_1 x1 x 2 x_2 x2,再让它们与相对应的参数相乘,就可以得到 b b b w 1 x 1 w_1x_1 w1x1 w 2 x 2 w_2x_2 w2x2三个结果。这三个结果通过连接到下一层神经元的直线,被输入下一层神经元。我们在第二层的神经元中将三个乘积进行加和(使用符号 ∑ \sum 表示),就可以得到加和结果 z ^ \hat{z} z^,即 b + x 1 w 1 + x 2 w 2 b + x_1w_1 + x_2w_2 b+x1w1+x2w2,这个值正是我们的预测值。可见,线性回归方程与上面的神经网络图达到的效果是一模一样的。

在上述过程中,左侧的是神经网络的输入层(input layer)。输入层由众多承载数据用的神经元组成,数据从这里输入,并流入处理数据的神经元中。在所有神经网络中,输入层永远只有一层,且每个神经元上只能承载一个特征或一个常量。现在的二元线性回归只有两个特征,所以输入层上只需要三个神经元,包括两个特征和一个常量,其中这里的常量仅仅是被用来乘以偏差用的。对于没有偏差的线性回归来说,我们可以不设置常量1。

右侧的是输出层(output layer)。输出层由大于等于一个神经元组成,我们总是从这一层来获取预测结果。输出层的每个神经元上都承载着单个或多个功能,可以处理被输入神经元的数据。在线性回归中,这个功能就是“加和”,当我们把加和替换成其他的功能,就能够形成各种不同的神经网络。

在神经元之间相互连接的线表示了数据流动的方向,就像人脑神经细胞之间相互联系的“轴突”。在人脑神经细胞中,轴突控制电子信号流过的强度,在人工神经网络中,神经元之间的连接线上的权重也代表了”信息可通过的强度“。最简单的例子是,当 w 1 w_1 w1为0.5时,在特征 x 1 x_1 x1上的信息就只有0.5倍能够传递到下一层神经元中,因为被输入到下层神经元中去进行计算的实际值是 0.5 x 0.5x 0.5x。相对的,如果 w 1 w_1 w1是2.5,则会传递2.5倍的 x 1 x_1 x1上的信息。

到此,我们已经了解了线性回归的网络是怎么一回事,它是最简单的回归神经网络,同时也是最简单的神经网络。类似于线性回归这样的神经网络,被称为单层神经网络。

单层神经网络
从直观来看,线性回归的网络结构明明有两层,为什么线性回归被叫做“单层神 经网络”呢?实际上,在描述神经网络的层数的时候,我们不考虑输入层。输入层是每个神经网络都必须存在的一层,任意两个神经网络之间的不同之处就在输入层之后的所有层。所以,我们把输入层之后只有一层的神经网络称为单层神经网络。

#首先使用numpy来创建数据
import numpy as np
X = np.array([[0,0],[1,0],[0,1],[1,1]])
z_reg = np.array([-0.2, -0.05, -0.05, 0.1])
X
X.shape
z_reg
#定义实现简单线性回归的函数
def LinearR(x1,x2):
    w1, w2, b = 0.15, 0.15,-0.2 #给定一组系数w和b
    z = x1*w1 + x2*w2 + b #z是系数*特征后加和的结果
    return z
LinearR(X[:,0],X[:,1])

可以看到,只要能够给到适合的w和b,回归神经网络其实非常容易实现。从这样的一个简单回归神经网络,我们很容易就可以把它推广到分类模型上。

1.2 二分类单层神经网络:sigmoid与阶跃函数

  • sigmoid函数
    在过去我们学习逻辑回归时,我们了解到sigmoid函数可以帮助我们将线性回归连续型的结果转化为0-1之间的概率值,从而帮助我们将回归类算法转变为分类算法逻辑回归。对于神经网络来说我们也可以使用相同的方法。首先先来复习一下Sigmoid函数的的公式和性质:

    Sigmoid函数是一个 S S S型的函数,当自变量 z z z趋近正无穷时,因变量 g ( z ) g(z) g(z)趋近于 1 1 1, 而当 z z z趋近负无穷时, g ( z ) g(z) g(z)趋近于 0 0 0,因此它能够将任何实数映射到 ( 0 , 1 ) (0,1) (0,1)区间,使其可用于将任意值函数转换为更适合二分类的函数。通常来说,自变量往往是回归类算法(如线性回归)的结果。将回归类算法的连续型数值压缩到 ( 0 , 1 ) (0,1) (0,1)之间后,我们使用阈值 0.5 0.5 0.5来将其转化为分类。即当 g ( z ) g(z) g(z)大于0.5时,我们认为样本 z i z_i zi对应的分类结果为 1 1 1类,反之则为 0 0 0类。
    g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+ e^{-z}} g(z)=1+ez1
    在这里插入图片描述

来看下面这组数据。很容易注意到,这组数据和上面的回归数据的特征 ( x 1 , x 2 ) (x_1,x_2) (x1,x2)是完全一致的,只不过标签 y y y由连续型结果转变为了分类型。这一组分类的规律是这样的:当两个特征都为 1 1 1的时候标签就为 1 1 1,否则标签就为 0 0 0。这一组特殊的数据被我们称之为“与门”(AND GATE),这里的“与”正是表示“特征一与特征二都是 1 1 1”的含义。

#重新定义数据中的标签 
y_and = [0,0,0,1] 
#根据sigmoid公式定义sigmoid函数 
def sigmoid(z):    
    return 1/(1 + np.exp(-z)) 
def AND_sigmoid(x1,x2):        
    w1, w2, b = 0.15, 0.15,-0.2  #给定的系数w和b不变    
    z = x1*w1 + x2*w2 + b    
    o = sigmoid(z)  #使用sigmoid函数将回归结果转换到(0,1)之间    
    y = [int(x) for x in o >= 0.5] #根据阈值0.5,将(0,1)之间的概率转变 为分类0和1    
    return o, y 
    
#o:sigmoid函数返回的概率结果 
#y:对概率结果按阈值进行划分后,形成的0和1,也就是分类标签 
o, y_sigm = AND_sigmoid(X[:,0],X[:,1]) 
y_sigm == y_and 
  • sign函数
    表达式:
    g ( z ) = y = { 1 i f z > 0 0 i f z = = 0 − 1 i f z < 0 g(z) = y = \left\{\begin{matrix} 1 & if z>0\\ 0 &if z==0\\ -1 &if z<0 \end{matrix}\right. g(z)=y= 101ifz>0ifz==0ifz<0
    在这里插入图片描述
    由于函数的取值是间断的,符号函数也被称为“阶跃函数”,表示在 0 0 0的两端,函数的结果 y y y是从 − 1 -1 1直接阶跃到了 1 1 1。在这里,我们使用 y y y而不是 g ( z ) g(z) g(z)来表示输出的结果,是因为输出结果直接是 0 0 0 1 1 1 − 1 -1 1这样的类别。对于sigmoid函数而言, g ( z ) g(z) g(z)返回的是 0   1 0~1 0 1之间的概率值,如果我们希望获取最终预测出的类别,还需要将概率转变成 0 0 0 1 1 1这样的数字才可以。但符号函数可以直接返回类别,因此我们可以认为符号函数输出的结果就是最终的预测结果 y y y。在二分类中,符号函数也可以忽略中间 z = = 0 z==0 z==0的时 候,直接分为 0 0 0 1 1 1两类,用如下式子表示:
    y = { 1 i f z > 0 − 1 i f z ≤ 0 ∵ z = w 1 x 1 + w 2 x 2 + b ∴ y = { 1 i f w 1 x 1 + w 2 x 2 + b > 0 − 1 i f w 1 x 1 + w 2 x 2 + b ≤ 0 ∴ y = { 1 i f w 1 x 1 + w 2 x 2 > − b − 1 i f w 1 x 1 + w 2 x 2 ≤ − b y = \left\{\begin{matrix} 1 & if z>0\\ -1 &if z\le 0\\ \end{matrix}\right. \\ \because z = w_1x_1 + w_2x_2 +b \\ \therefore y =\left\{\begin{matrix} 1 & if w_1x_1 + w_2x_2 +b >0\\ -1 &if w_1x_1 + w_2x_2 +b \le 0\\ \end{matrix}\right. \\ \therefore y =\left\{\begin{matrix} 1 & if w_1x_1 + w_2x_2 >-b\\ -1 &if w_1x_1 + w_2x_2 \le -b\\ \end{matrix}\right. y={11ifz>0ifz0z=w1x1+w2x2+by={11ifw1x1+w2x2+b>0ifw1x1+w2x2+b0y={11ifw1x1+w2x2>bifw1x1+w2x2b

此时, − b -b b就是一个阈值,我们可以使用任意字母来替代它,比较常见的是字母 θ \theta θ。当然,不把它当做阈值,依然保留 w 1 x 1 + w 2 x 2 + b w_1x_1 + w_2x_2 +b w1x1+w2x2+b与0进行比较的关系也没有任何问题。和sigmoid一样,我们也可以使用阶跃函数来处理”与门“的数据:

def AND(x1,x2):    
    w1, w2, b = 0.15, 0.15, -0.23 #和sigmoid相似的w和b    
    z = x1*w1 + x2*w2 + b    
    y = [int(x) for x in z >= 0]    
    return y 
    
AND(X[:,0],X[:,1]) 

y_and

阶跃函数和sigmoid都可以完成二分类的任务。在神经网络的二分类中, g ( z ) g(z) g(z)几乎默认是sigmoid函数,少用阶跃函数,这是由神经网络的解法决定的.

1.3 多分类单层神经网络:softmax回归

在了解二分类后,我们可以继续将神经网络推广到多分类。逻辑回归通过Many-vs-Many(多对多)和Onevs-Rest(一对多)模式来进行多分类。其中,OvR是指将多个标签类别中的一类作为类别 1 1 1,其他所有类别作为类别 0 0 0,分别建立多个二分类模型,综合得出多分类结果的方法。MvM是指把好几个标签类作为 1 1 1,剩下的几个标签类别作为 0 0 0,同样分别建立多个二分类模型来得出多分类结果的方法。这两种方法非常有效,尤其是在逻辑回归做多分类的问题上能够解决很多问题,但是对于神经网络却不奏效。理由非常简单:

    1. 逻辑回归是一个单层神经网络,计算非常快速,在使用OvR和MvM这样需要同时建立多个模型的方法时,运算速度不会成为太大的问题。但真实使用的神经网络往往是一个庞大的算法,建立一个模型就会耗费很多时间,因此必须建立很多个模型来求解的方法对神经网络来说就不够高效。
    1. 我们有更好的方法来解决这个问题,那就是softmax回归。

Softmax函数是深度学习基础中的基础,它是神经网络进行多分类时,默认放在输出层中处理数据的函数。假设现在神经网络是用于三分类数据,且三个分类分别是苹果,柠檬和百香果,序号则分别是分类 1、分类2和分类3。则使用softmax函数的神经网络的模型会如下所示:
在这里插入图片描述
与二分类一样,我们从网络左侧输入特征,从右侧输出概率,且概率是通过线性回归的结果 z z z外嵌套softmax函数来进行计算。在二分类时,输出层只有一个神经元,只输出样本对于正类别的概率(通常是标签为 1 1 1的概率),而softmax的输出层有三个神经元,分别输出该样本的真实标签是苹果、柠檬或百香果的概率。在多分类中,神经元的个数与标签类别的个数是一致的,如果是十分类,在输出层上就会存在十个神经元,分别输出十个不同的概率。此时,样本的预测标签就是所有输出的概率 σ 1 \sigma_1 σ1 σ 2 \sigma_2 σ2 σ 3 \sigma_3 σ3中最大的概率对应的标签类别
那每个概率是如何计算出来的呢?来看Softmax函数的公式:
σ k = S o f t m a x ( z k ) = e z k ∑ K e z \sigma_k = Softmax(z_k) = \frac{e^{z_k}}{\sum^K e^z} σk=Softmax(zk)=Kezezk

其中 e e e为自然常数(约为2.71828), z z z与sigmoid函数中的一样,表示回归类算法(如线性回归)的结果。 K K K表示该数据的标签中总共有 K K K个标签类别,如三分类时 K = 3 K=3 K=3 ,四分类时 K = 4 K=4 K=4 k k k表示标签类别 k k k类。很容易可以看出,Softmax函数的分子是多分类状况下某一个标签类别的回归结果的指数函数,分母是多分类状况下所有标签类别的回归结果的指数函数之和,因此Softmax函数的结果代表了样本的结果为类别 k k k的概率。

举个例子,当我们有三个分类,分别是苹果,梨,百香果的时候,样本 i i i被分类为百香果的概率 σ 百香果 \sigma_{百香果} σ百香果为:
σ 百香果 = σ 百香果 σ 苹果 + σ 梨 + σ 百香果 \sigma_{百香果} = \frac{\sigma_{百香果}}{\sigma_{苹果}+\sigma_{梨}+\sigma_{百香果}} σ百香果=σ苹果+σ+σ百香果σ百香果

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

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

相关文章

Java ElasticSearch-Linux面试题

Java ElasticSearch-Linux面试题 前言1、守护线程的作用&#xff1f;2、链路追踪Skywalking用过吗&#xff1f;3、你对G1收集器了解吗&#xff1f;4、你们项目用的什么垃圾收集器&#xff1f;5、内存溢出和内存泄露的区别&#xff1f;6、什么是Spring Cloud Bus&#xff1f;7、…

【零基础SRC】成为漏洞赏金猎人的第一课:加入玲珑安全漏洞挖掘班。

我们是谁 你是否对漏洞挖掘充满好奇&#xff1f;零基础或有基础但想更进一步&#xff1f;想赚取可观的漏洞赏金让自己有更大的自由度&#xff1f; 那么&#xff0c;不妨了解下我们《玲珑安全团队》。 玲珑安全团队&#xff0c;拥有多名实力讲师&#xff0c;均就职于互联网头…

【比较mybatis、lazy、sqltoy、mybatis-flex操作数据】操作批量新增、分页查询(二)

orm框架使用性能比较 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0比较mybatis、lazy、sqltoy、mybatis-flex操作数据 测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4-JDK17-SNAPS…

仿牛客网项目---帖子详情功能的实现

这篇文章主要讲讲帖子详情功能。其实帖子详情功能简单来说就是你点进去可以看到文章&#xff0c;这就叫帖子详情功能。那接下来我讲讲我的这个项目是如何实现这个功能的。 首先写DAO层。 Mapper public interface DiscussPostMapper {List<DiscussPost> selectDiscussPo…

【Unity】在Unity中导出WebGL并读取Excel数据的实现方法

在游戏开发中&#xff0c;数据的处理和导出是至关重要的环节之一。Unity作为一款强大的游戏开发引擎&#xff0c;提供了丰富的工具和功能来处理和导出数据&#xff0c;包括将游戏导出为WebGL应用&#xff0c;并读取外部数据文件&#xff0c;比如Excel表格。本文将介绍如何在Uni…

Navicat Premium 16:打破数据库界限,实现高效管理mac/win版

Navicat Premium 16是一款功能强大的数据库管理工具&#xff0c;旨在帮助用户更轻松地连接、管理和保护各种数据库。该软件支持多种数据库系统&#xff0c;如MySQL、Oracle、SQL Server、PostgreSQL等&#xff0c;并提供了直观的图形界面&#xff0c;使用户能够轻松地完成各种数…

计算机网络_2.2物理层下面的传输媒体

2.2物理层下面的传输媒体 一、传输媒体的分类二、导向型传输媒体1、同轴电缆2、双绞线3、光纤&#xff08;1&#xff09;光纤通信原理&#xff08;2&#xff09;光纤组成&#xff08;4&#xff09;多模光纤与单模光纤对比&#xff08;5&#xff09;光纤的波长与规格&#xff08…

WSL2部署RV1126 SDK编译环境

1 下载RV1126 SDK 在 Firefly | 让科技更简单&#xff0c;让生活更智能 下载REPO_SDK 这里将SDK下载到了F:\SDK 2 解压SDK到WSL2 tar -xvf /mnt/f/SDK/rv1126_rv1109_linux_release_20211022.tgz 3 编译依赖安装 gcc、g版本依赖安装 sudo apt-get install lib32gcc-7-dev g-7 l…

【center-loss 中心损失函数】 原理及程序解释(更新中)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码&#xff08;center_loss.py&#xff09;原理程序解释 代码运用 如何梯度更新首先了解一下基本的梯度下降算法然后 补充&#xff1a;外围知识模型 前言 学习一下&#xff1a; 中心损失函…

你真的了解C语言中的【柔性数组】吗~

柔性数组 1. 什么是柔性数组2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势 1. 什么是柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的。 C99中&#xff0c;结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员…

2024年腾讯云优惠券领取入口、查看使用和常见问题解答FAQ

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

力扣hot100题解(python版36-40题)

36、二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 *中序 遍历* 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&am…

Mysql主从备份

主从复制概述 将主服务器的binlog日志复制到从服务器上执行一遍&#xff0c;达到主从数据的一致状态&#xff0c;称之为主从复制。一句话表示就是&#xff0c;主数据库做什么&#xff0c;从数据库就跟着做什么。 为什么要使用主从复制 为实现服务器负载均衡/读写分离做铺垫&…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

Ansible的playbook的编写和解析

目录 什么是playbook Ansible 的脚本 --- playbook 剧本 实例部署&#xff08;使用playbook安装启动httpd服务&#xff09; 1.编写一个.yaml文件 在主机下载安装http&#xff0c;将配置文件复制到opt目录下 运行playbook 在192.168.17.77主机上查看httpd服务是否成功开启…

BY组态功能清单

演示地址 &#xff1a;http://www.byzt.net:60/sm/ 官网地址&#xff1a;http://www.hcy-soft.com BY组态是一款非常优秀的纯前端的【web组态插件工具】&#xff0c;可无缝嵌入到vue项目&#xff0c;react项目等&#xff0c;由于是原生js开发&#xff0c;对于前端的集成没有框架…

vue2 引入阿里图标库iconfont

有时候我们使用的 ui 里面图标是不够丰富的&#xff0c;不一定可以满足我们的需求。 这时我们可以引入阿里图标库来丰富自己的项目图标。 上步骤&#xff1a; 1、点击文字地址连接&#xff1a; iconfont-阿里巴巴矢量图标库 2、登录&#xff0c;没有账号需要先使用手机号注册…

【Java题】调整奇数位于偶数之前(超简单版)

题目&#xff1a; 调整数组顺序使得奇数位于偶数之前。调整之后&#xff0c;不关心大小顺序。 如数组&#xff1a;[1,2,3,4,5,6,7,8,9] 调整后可能是&#xff1a;[1, 9,3,7,5, 6, 4, 8, 2] 代码&#xff1a; import java.util.Arrays;public class Main {public static voi…

MySQL存储引擎及索引机制

MySQL技术——存储引擎和索引机制 一、存储引擎概述二、常见存储引擎的区别三、索引机制四、索引的底层实现原理五、InnoDB主键和二级索引六、聚集索引和非聚集索引七、哈希索引八、InnoDB的自适应哈希索引九、索引常见问题十、慢查询日志总结 一、存储引擎概述 插件式存储引擎…

b站小土堆pytorch学习记录——P7-P8 Tensorboard的使用

文章目录 一、前置知识1.Tensorboard是什么2.SummaryWriter3.add_scalar()4.add_image() 二、代码1.一次函数2.蚂蚁和蜜蜂图片 一、前置知识 1.Tensorboard是什么 TensorBoard 是 TensorFlow 的可视化工具&#xff0c;它允许开发者可视化模型的图&#xff08;graph&#xff0…