【深度学习】认识神经网络

news2024/11/14 10:24:03

上一章——过拟合与正则化

从本章开始我们将学习深度学习的内容:包括神经网络和决策树等高级算法

文章目录

  • 神经网络的生物学原理
  • 神经网络的算法结构
  • 案例——图像感知
  • 神经网络的前向传播


神经网络的生物学原理

在最开始,人们想要构建一个能够模拟生物大脑来进行学习和思考的算法程序,于是从生物学的结构出发,创造了神经网络算法。
如果你对高中生物比较熟悉,那么应该能够更好地理解下面的知识。
在这里插入图片描述

在人类的大脑中布满了神经元细胞,它是神经系统最基本的结构和功能单位,我们的思维就起源于神经元。在人体中信号是以电脉冲的形式传递的,神经元之间的信号传递我们称之为"兴奋",兴奋的传递过程就是通过外部刺激产生电信号,并在神经元的突触之间传输,最终实现思考等神经活动。
如果将其类比为程序,相当于对神经元A输入input,由神经元A输出给神经元B,再由神经元B输出给神经元C…最后输出需要的结果。
在这里插入图片描述
这是单个神经元的结构,上方被称为胞体,其散发出的触手状结构称为树突,下方长条状结构称为轴突,尾部被称为轴突末梢。神经元之间的连接就是头尾相连的状态。
在这里插入图片描述如果将这种结构简化为数学模型,那么就如右图所示,我们将原图中的一个神经元看作一个单元,给予第一个单元input值,经过第一个单元的计算后的output值再输入到下一个单元中,这就是神经网络的原理。
神经网络算法之所以在近几年异军突起,得益于硬件的发展实现了越来越快的计算机处理,以及大数据。
(我们只是借用生物学的动机来模拟思考过程,生物学发展十分迅速,不要拘泥于生物学的具体实际)


神经网络的算法结构

在这里插入图片描述假设你开了一家服装店,给出一个特征:比如服装的价格,你想预测什么样的服装是最畅销的。把它看作是一个分类问题,那么我们应该用逻辑回归来解决,如上图所示。
我们知道 f ( x ) f(x) f(x)代表了假设函数,在分类问题中用到的是logistic函数,但是在神经网络中我们给它取一个新的定义:activation(激活),简称a,这是借用了神经学中的术语,指的是上游神经元向下游神经元发射的兴奋。
如果我们将函数 f ( x ) f(x) f(x)简单地看成一个单元,一个微型计算机或者一个电路中的元件,如右下所示,我们输入x后得到了结果a,在本题中a即逻辑函数的预测值。这就好比单个神经元在整个神经网络中实现的工作。
在这里插入图片描述

现在我们多添加几个输入特征,并且根据这些特征得到三个神经元的结果来预测最终的畅销可能性。如图所示:
第一个神经元通过特征price和shipping cost来预测成本affordability
第二个神经元通过特征marketing来预测知名度awareness
第三个神经元通过特征price和material来预测质量quality
成本、知名度、质量,这三个要素对于最终畅销可能性的预测都是必要的,最后我们将这三个要素输入到最后的神经元,其输出结果就是最终的畅销可能性的预测值。
如果我们将中间蓝色的三个神经元分为一组,我们称其为“一层”,右边粉色的单个神经元我们也称为一层(相信计算机专业的对于层这个概念一定很熟悉了),同样的最左边的输入特征也可以归为一层。我们将最初用于输入的那一层称为输入层,最后一层被称为输出层。
对于中间层的输出结果,我们称其为activation(激活),我们将中间层称为隐藏层(hidden layer)
尽管我们可以用给出的特征来直接进行预测,但是显然用隐藏层给出的结果来预测要比直接用特征预测更加准确。
你可能想起了我们之前在讲特征工程的适合,将房子的长和宽两个特征合并为面积,区别在于我们在特征工程中需要手动来构造更复杂的特征,然而在神经网络中是不需要的,它可以自己学习特征。当你使用神经网络的时候,你不需要特别指出特征,它可以自己计算在隐藏层中所要用的特征。
在这里插入图片描述
由于我们的输入值通常是整个特征向量,因此所有的特征都要经过隐藏层的计算,因此隐藏层可以自动地选择需要的特征。
在这里插入图片描述
对于不同的神经网络,我们可以设置多个隐藏层,每个隐藏层设置任意多个神经元。正常选择隐藏层和神经元的数量可以有效提高算法效率。
由于程序的表现是“输入——>计算——>输出”,其中隐藏层位于计算部分,由于整个程序就像是一个黑盒,因此我们看不到中间层的计算方法,所以将中间层称为隐藏层。


案例——图像感知

在这里插入图片描述
图像是怎么进行识别的?首先假设给出一个1000p(像素)x1000p。以亮度值为特征,每一个像素都有对应的强度值,因此我们可以把整张图像的亮度值看成一个1000x1000的矩阵,如果要作为向量进行输入,那么我们将其按行展开得到输入向量x
在这里插入图片描述
在这里插入图片描述

我们最终想要识别出此人是谁的概率。在人像识别的过程中需要经历数个隐藏层的计算,例如以上图为例经过了三个隐藏层,第一层中,第一个神经元可能想要寻找到拥有竖直边缘的第一个像素,第二个神经元想要找到一条像这样有方向的线或者有方向的边,第三个神经元可能想在这个方向上寻找一条边,因此在第一层中,神经元试图找到图中的一些非常短的线段或者边缘,最终输出的激活值 a [ 1 ] a^{[1]} a[1]就是第一层下方的一些包含了线段的集合。

第一层的那些线段,就是器官的边缘部分,它们能够帮助我们构建出器官的形状。在第二层中,我们将上一层的 a [ 1 ] a^{[1]} a[1]作为输入,一些神经元可能会将部分小短线、小短边段组合在一起,来检查是否找到了一些器官的位置,比如在 a [ 2 ] a^{[2]} a[2]的输出集合中,第一个神经元可能在寻找左眼的位置,第二个神经元在寻找鼻子的底部的位置,第三个在寻找鼻梁的位置…

那么通过第二层我们找到了器官的整体形状和位置,有了五官之后我们就能构建出一个模糊的人脸。在第三层中,神经元正在聚合面部的不同部分,试图建立粗粒度更大的面部轮廓,并在最终检验五官与不同面部轮廓的适配度,最终形成 a [ 3 ] a^{[3]} a[3]来帮助输出层判别人像身份的概率。

更神奇的是,在整个神经网络的工作过程中,不需要人来制定神经元的工作,没有人规定第一层要找到线段,第二层找器官,第三层找脸型…神经网络能自己从数据中找出这些东西。此外,随着特征复合程度变高,输入窗口也会变得越来越大,第一层的窗口可能是小号的,第二层变为了中号,第三层变成大号窗口,上图中可视化的神经元输出集合,每层的格子都代表了不同大小的窗口。

在这里插入图片描述
如果我们在同一个神经网络中,将人像的输入换为汽车图像的输入,那么它也会自动寻找边缘线段、汽车结构、整体…对于不同的数据,神经网络会自动学习检测不同的特征,从而完成检测是否存在某个特定事物的工作。


神经网络的前向传播

在这里插入图片描述在神经网络中,由于往往存在上百个神经元甚至上百个层级,因此我们有必要对其中的数值进行标号。
我们把输入层看为第0层,层数依次递增,输入层的输入向量被称为向量 x ⃗ \vec x x ,在上图中,第一层有三个神经元,每层神经元都是一个逻辑函数,其中上标 [ 1 ] [1] [1]代表当前的层级,下标 n n n代表是当前层级第 n n n个神经元,例如第一个神经元中的系数向量 w ⃗ 1 [ 1 ] \vec w^{[1]}_1 w 1[1],第二个神经元中的系数向量就是 w ⃗ 2 [ 1 ] \vec w^{[1]}_2 w 2[1],如果是第二层第三个神经元中的系数向量就标为 w ⃗ 3 [ 2 ] \vec w^{[2]}_3 w 3[2]…我们可以看到,第一层神经元的计算结果依次是0.3,0.7,0.2,最终可以合并为一个输出向量 a ⃗ [ 1 ] = [ 0.3 0.7 0.2 ] \vec a^{[1]} =\begin{bmatrix} 0.3 \\ 0.7 \\ 0.2 \end{bmatrix} a [1]= 0.30.70.2 ,代表激活向量a是第一层的输出结果,之后它将被输入到第二层。

在这里插入图片描述
第二层也是同理,由于第二层是最终的输出层,所以最终得到的第二层的输出结果 a [ 2 ] a^{[2]} a[2]应当是一个确切的数值。层级之间的作用就是输入一个向量,并通过运算得到另一个向量。输入层也可以视为 a ⃗ [ 0 ] \vec a^{[0]} a [0]

在这里插入图片描述
x ⃗ \vec x x a ⃗ [ 1 ] \vec a^{[1]} a [1] a ⃗ [ 2 ] \vec a^{[2]} a [2]…最终到输出结果 a ⃗ [ n ] \vec a^{[n]} a [n]这种从左向右的计算过程,我们称之为神经网络的前向传播,最后的输出结果我们也可以称之为 f ( x ) f(x) f(x),还记得我们之前的过程中,对于线性回归或者逻辑回归的假设函数的输出结果也称为 f ( x ) f(x) f(x),我们现在可以用它来表示神经网络的函数。而其也存在一个相反的神经网络,我们称为反向传播,一般用于学习。
一般来讲,神经网络的结构总是随着层级的变大,其隐藏层单元的数量会越来越少。

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

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

相关文章

Python __doc__属性:查看文档

在使用 dir() 函数和 __all__ 变量的基础上,虽然我们能知晓指定模块(或包)中所有可用的成员(变量、函数和类),比如:import string print(string.__all__)程序执行结果为:[ascii_lett…

Zabbix 构建监控告警平台(六)

监控TCP连接监控MySQL监控php-fpm监控 Apache监控 MySQL A-B监控磁盘I/O1.监控TCP连接 1.1 tcp状态简介 netstat中的各种状态: CLOSED 初始(无连接)状态。 LISTEN 侦听状态,等待远程机器的连接…

自动驾驶规控课程学习——决策规划

行为决策系统的规划1 行为决策基础1.1 基本概念与任务行为类型:系统输入输出:输入:定位、感知、地图等输出:决策意图小例子:1.2决策系统的评价与挑战评价指标挑战(1)决策密度(2&…

卡尔曼滤波器与DSP实现

卡尔曼滤波器是利用系统状态方程,结合测量结果对系统状态进行进行最优估计的算法。本文介绍它的主要公式,并举例在C6000 DSP上实现。 推荐资料 KalmanFilter.NETUnderstanding Kalman Filters卡尔曼滤波与组合导航原理 “If you can’t explain it sim…

rust 程序设计语言入门(1)

本文是阅读《Rust程序设计语言》的学习记录,配合视频《Rust编程语言入门教程》食用更佳 环境搭建 windows下载rustup_init.exe,点击安装,默认选择msvc的toolchain,一路default即可 解决下载慢的问题,在powershell中修…

libxlsxwriter条件格式

今天来看一个libxlsxwriter的高级用法:一个条件格式的示例。 说它“高级”,也是基于非Excel专家的小白们的视角。对,没错,本小白正是这样的小白。 1 一个简单的问题 来看我们今天的场景问题:有一列数据,有…

操作系统(一): 进程和线程,进程的多种状态以及进程的调度算法

文章目录前言一、进程和线程1. 进程2. 线程二、进程和线程的区别(面试常问)三、进程调度算法3.1. 批处理系统3.2. 交互式系统3.2.1 时间片轮转3.2.2 优先级调度3.2.3 多级别反馈队列3.3. 实时系统四、进程的状态五、进程同步5.1 什么是进程同步5.2 进程同步应该遵循的几点原则前…

Qt 学习(四) —— QGridLayout栅格布局

目录一、QGridLayout布局规则二、创建QGridLayout三、成员函数1. 控件间距2. 可拉伸控件(弹簧)3. 最小行高/列宽4. 行数和列数5. 锁定纵横比6. 添加控件7. 添加布局8. 设置栅格布局原点位置9. 操作布局项9.1 访问布局项9.2 删除布局项9.3 通过索引获取布…

Git教程个人分享:如何将一个本地项目上传至远程仓库的流程

前言: 今天来分享一下,关于Git的一些教程,同时这也是我自己曾今学习Git时候的笔记,之所以更,也是方便后期自己可以去回顾,当然后面也会出一部分关于Git其他操作方面的内容。 这次我们分享的是&#xff0c…

基于JavaScript的Web端股票价格查看器——大道

🐶 基于JavaScript的Web端股票价格查看器——大道 一、项目背景 当下互联网发展迅速,互联网已经不断向传统金融领域渗透。在互联网上有大量金融领域的数据,如何利用好这些数据,对于投资者来说是十分重要的一件事情。股票价格实时…

JavaSE学习day4_01 循环for,while,do...while

1. 循环高级 1.1 无限循环 for、while、do...while都有无限循环的写法。 最为常用的是while格式的。 因为无限循环是不知道循环次数的,所以用while格式的 代码示例: while(true){} 1.2 跳转控制语句(掌握) 跳转控制语句&…

MySQL 插入数据

数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表…

51单片机——步进电机实验,小白讲解,相互学习

步进电机简介: 步进电机是将电脉冲信号转变为角位移或多线位移的开源控制元件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机…

Android - 自动系统签名

一、系统签名 以下是两类应用开发场景: 普通应用开发:使用公司自定义 keystore 进行签名,如:微信、支付宝系统应用开发:使用 AOSP 系统签名或厂商自定义 keystore 进行签名,如:设置、录音 系…

数学建模拓展内容:卡方检验和Fisher精确性检验(附有SPSS使用步骤)

卡方检验和Fisher精确性检验卡方拟合度检验卡方独立性检验卡方检验的前提假设Fisher精确性检验卡方拟合度检验 卡方拟合度检验概要:卡方拟合度检验也被称为单因素卡方检验,用于检验一个分类变量的预期频率和观察到的频率之间是否存在显著差异。 卡方拟…

第一部分:简单句——第二章:简单句的补充

简单句的核心构成:一主一谓 主语/宾语/表语 可以变成名词/代词/doing/to do 谓语动词有四种核心变化:三态 一否 时态语态情态否定 简单句的核心:将简单句给写对 简单句的补充:将简单句给写的更好、更充分 简单句的补充 1、限定…

计算机网络之HTTP04ECDHE握手解析

DH算法 离散读对数问题是DH算法的数学基础 (1)计算公钥 (2)交换公钥,并计算 对方公钥^我的私钥 mod p 离散对数的交换幂运算交换律使二者算出来的值一样,都为K k就是对称加密的秘钥 2. DHE算法 E&#…

DNS 原理入门指南(一)

DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。 一、DNS 是什么&#xff1…

记录每日LeetCode 1138.字母板上的路径 Java实现

题目描述: 我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"]&#x…

Linux重定向符、管道符讲解

目录 重定向 将命令与文件进行互动 输出重定向 输入重定向 管道符 将命令与命令互动起来 重定向 将命令与文件进行互动 重定向分类 一般情况下,Linux命令运行时都会打开一下三个文件 标准输入文件:stdin文件,文件描述符为0,Li…