首页 > 其他分享 >神经网络的计算步骤

神经网络的计算步骤

时间:2023-06-08 14:03:52浏览次数:39  
标签:输出 函数 导数 步骤 神经网络 计算 np 输入




神经网络的计算步骤

  • 输入层
  • 1、数据输入
  • 隐藏层
  • 正向传播:输入端向输出端传递信息
  • 2、得到输出值:直线方程进行预测
  • 反向传播:输出端向输入端传递信息
  • 3、得到误差:损失函数计算误差
  • 4、得到偏导数:计算图高效计算偏导数
  • 5、更新权重偏置:梯度下降法学习,最小化误差
  • 输出层



 


一个神经网络分为输入层、隐藏层、输出层。

  • 输入层:输入数据
  • 隐藏层:负责计算
  • 输出层:计算和输出结果

神经网络的计算步骤_人工智能


 


输入层

1、数据输入

  • 语音/图像/传感器数据都会转成数字形式(如矩阵),再把他们转化为一个特征向量(向量),将其输入到神经网络中。

比如图像数据,世界上的所有颜色都可以通过,红绿蓝三种颜色调配出来。

计算机保存一张图片,要保存三个独立矩阵,分别对应红、绿、蓝三个颜色通道。

假设图片是 64x64 像素的,就有 3 个 64x64 的矩阵,分别对应红绿蓝三个像素的亮度。

为了方便计算,我们会把 3 个矩阵转化为 1 个列向量(特征向量)。

神经网络的计算步骤_损失函数_02


这个向量的总维数就是 64*64*3,结果是 12288 个特征。

 


隐藏层

正向传播:输入端向输出端传递信息

2、得到输出值:直线方程进行预测

将待预测数据,这些特征 神经网络的计算步骤_损失函数_03

神经网络的计算步骤_数据_04

单层神经元的计算,就是一个直线方程:

  • 神经网络的计算步骤_损失函数_05

前置知识:为什么是一个直线方程,请猛击《神经元的计算》。

现在我们来看多层神经元:

神经网络的计算步骤_人工智能_06


如果第 神经网络的计算步骤_神经网络_07 层神经元有 神经网络的计算步骤_人工智能_08 个,那第 神经网络的计算步骤_数据_09 层的每个神经元都得存储 神经网络的计算步骤_人工智能_08

如果第 神经网络的计算步骤_数据_09 层神经元有 神经网络的计算步骤_神经网络_12 个,则第 神经网络的计算步骤_数据_09 层神经元共有 m*n 个权重。

我们会用一个 m*n 矩阵来存储:

神经网络的计算步骤_损失函数_14


当前层的神经网络计算:

神经网络的计算步骤_神经网络_15


编程实现:

u = np.dot(x, w) + b    # dot() 实现矩阵乘法

再计算激活函数,如 神经网络的计算步骤_人工智能_16

def sigmod(x):
	return 1 / (1 + e.exp(-x))
	
y = sigmod(u)

得到当前层输出 神经网络的计算步骤_损失函数_17,再把 神经网络的计算步骤_损失函数_17

我们以一个三层神经网络举例:

神经网络的计算步骤_损失函数_19

  • 输入层神经元个数:2
  • 中间层神经元个数:2
  • 输出层神经元个数:1
# 权重
w_im = np.array( [ [4.0, 4.0], [4.0, 4.0] ] )      # 输入层 * 中间层,即 2 * 2
w_mo = np.array( [ [1.0], [1.0] ] )                # 中间层 * 输出层,即 2 * 1

# 偏置
b_im = np.array( [3.0, -3.0] )                     # 中间层有 2 个神经元,就 2 个偏置
b_mo = np.array( [0.1] )                           # 输出层有 1 个神经元,就 1 个偏置

def middle_layer( x , w, b ):      # 中间层/隐藏层,输入 x、权重 w、偏置 b
    u = np.dot( x, w ) + b         # 直线方程
    return 1/(1+np.exp(-u))        # 激活处理

def output_layer( x , w, b ):      # 输出层,输入 x、权重 w、偏置 b
    u = np.dot( x, w ) + b         # 直线方程
    return u                       # 恒等函数,不做激活处理
    
# 正向传播过程
imp = np.array([...])              # 输入层,直接输入数据即可,不用计算
mid = middle_layer(imp, w_im, b_im)            # 中间层
out = output_layer(mid, w_mo, b_mo)            # 输出层

这是处理回归问题的正向传播过程,还有一类问题是分类。

比如处理二分类任务,输出层需要俩个神经元:

神经网络的计算步骤_人工智能_20

除了输出层的激活函数使用 神经网络的计算步骤_损失函数_21

def output_layer( x , w, b ):      # 输出层,输入 x、权重 w、偏置 b
    u = np.dot( x, w ) + b         # 直线方程
	return np.exp( u ) / np.sum( np.exp( u ) )    # softmax 函数

输出层输出的是一个概率值,我们比较俩个神经元的概率值,取最大值。

神经网络的计算步骤_损失函数_22

 


反向传播:输出端向输入端传递信息

反向传播过程:

神经网络的计算步骤_人工智能_23

  • 前向传播过程:直线方程计算权重参数把输入值相加,再加入偏移值得到一个处理结果,加上激活函数形成一个输出值。
  • 反向传播过程:损失函数计算误差,通过计算图先计算第 N 层的偏导数(变化比例),再计算第 N-1 层的,输出层反向往前推,直到输入层;再通过梯度下降法学习,最小化误差。

这样来回不停的进行前向传播、反向传播,来训练(更新)参数使损失函数越来越小(预测越来越准确)。

原理:每次新的训练数据进来,就根据正确答案对参数进行一次微调,使得神经网络输出数值更接近正确答案。

计算过程图示:

神经网络的计算步骤_神经网络_24

首先把数据,分为:输入数据、正确答案。

神经网络的计算步骤_数据_25

正向传播输出与正确答案对比:

神经网络的计算步骤_人工智能_26

 


3、得到误差:损失函数计算误差

对输出和正确答案的误差,进行定义的就是损失函数。

神经网络的计算步骤_神经网络_27


理论上我们可以用平方,但是在工程中,我们一般会用这个损失函数:

  • 神经网络的计算步骤_神经网络_28

这是对单个训练样本(一张图)的损失函数,但我们输入都神经网络的通常是一个训练集(大量的图片)。

我们需要累加单个训练样本的结果,再求平均值:

  • 神经网络的计算步骤_数据_29

为什么使用这个损失函数呢?

这个损失函数(逻辑回归)的函数图像是一个向下凸的图形。

神经网络的计算步骤_人工智能_30


因为学习,就是找到一组 神经网络的计算步骤_神经网络_31神经网络的计算步骤_数据_32,使这个损失函数最小。

也就是在这个函数图像的底部找到一组 神经网络的计算步骤_神经网络_31神经网络的计算步骤_数据_32

这个损失函数叫逻辑回归,具体内容记录在同名博客:《逻辑回归》。

这个损失函数没有局部最优解,只存在唯一的全局最优解。

我们要做的,是求出损失函数的梯度,而后运用梯度下降法求出损失最小的一组 w 和 b。
 


4、得到偏导数:计算图高效计算偏导数

我们用函数 神经网络的计算步骤_损失函数_35

为了让神经网络计算,函数 神经网络的计算步骤_数据_36

神经网络的计算步骤_数据_37


一开始,我们随机初始化 神经网络的计算步骤_人工智能_38 分别为 神经网络的计算步骤_神经网络_39,前向传播过程如下图:

神经网络的计算步骤_损失函数_40


前向传播得到输出值。反向传播用于计算函数 神经网络的计算步骤_神经网络_41 关于各个参数的偏导数(变化比例),而后对参数进行梯度下降。

神经网络的计算步骤_神经网络_42


我们先计算 神经网络的计算步骤_神经网络_41 关于 神经网络的计算步骤_神经网络_44 的偏导数,记为 神经网络的计算步骤_神经网络_45

偏导数、斜率就是变化比例,即 神经网络的计算步骤_神经网络_44 变化一点后 神经网络的计算步骤_神经网络_41

所以,为了计算 神经网络的计算步骤_神经网络_44 的偏导数,我们假设让 神经网络的计算步骤_神经网络_44 变化一点点,比如 神经网络的计算步骤_神经网络_44 加上 神经网络的计算步骤_人工智能_51(11.001),而后看 神经网络的计算步骤_神经网络_41 改变了多少,神经网络的计算步骤_神经网络_41神经网络的计算步骤_人工智能_54 变成了 神经网络的计算步骤_神经网络_55

神经网络的计算步骤_神经网络_41 的变化量除以 神经网络的计算步骤_神经网络_44 的变化量(0.003 / 0.001 = 3),即偏导数(变化比例)为 神经网络的计算步骤_人工智能_58

  • 同理,神经网络的计算步骤_数据_59 关于 神经网络的计算步骤_损失函数_60 的偏导数为 神经网络的计算步骤_数据_61
  • 同理,神经网络的计算步骤_损失函数_60 关于 神经网络的计算步骤_数据_63 的偏导数为 神经网络的计算步骤_损失函数_64

那么,神经网络的计算步骤_神经网络_41 关于 神经网络的计算步骤_人工智能_66

  • 我们让 神经网络的计算步骤_数据_67 改变一点点,从 神经网络的计算步骤_数据_68 变成 神经网络的计算步骤_数据_69,这会导致 神经网络的计算步骤_人工智能_70神经网络的计算步骤_数据_71 变成 神经网络的计算步骤_数据_72,而 神经网络的计算步骤_人工智能_70 的改变会导致 神经网络的计算步骤_人工智能_74神经网络的计算步骤_数据_75 变成 神经网络的计算步骤_数据_76神经网络的计算步骤_人工智能_74 的改变量除以神经网络的计算步骤_数据_67 的改变量等于 神经网络的计算步骤_数据_79(0.003/0.001=3),即偏导数 神经网络的计算步骤_神经网络_80神经网络的计算步骤_数据_79

其实间接传导的计算,我们用链式法则求导:

  • 神经网络的计算步骤_人工智能_74 关于 神经网络的计算步骤_数据_67 的偏导数 = 神经网络的计算步骤_人工智能_74 关于 神经网络的计算步骤_人工智能_70 的偏导数 * 神经网络的计算步骤_人工智能_70 关于 神经网络的计算步骤_数据_67 的偏导数,即 神经网络的计算步骤_数据_88

同理,神经网络的计算步骤_神经网络_41 关于参数 神经网络的计算步骤_数据_32 的偏导数 神经网络的计算步骤_数据_91

神经网络的计算步骤_人工智能_92 这个偏导数才是我们最终需要的,我们需要的是函数 神经网络的计算步骤_神经网络_41 关于参数 神经网络的计算步骤_人工智能_38

为了得到这三个偏导数,我们需要先计算出关于 神经网络的计算步骤_神经网络_44 的偏导数,而后再计算出关于 神经网络的计算步骤_人工智能_66 的偏导数,最后计算出关于参数 神经网络的计算步骤_人工智能_38

  • 神经网络的计算步骤_人工智能_98
  • 神经网络的计算步骤_数据_99
  • 神经网络的计算步骤_神经网络_100

反向传播后更新 神经网络的计算步骤_神经网络_101

  • 神经网络的计算步骤_数据_102
  • 神经网络的计算步骤_人工智能_103
  • 神经网络的计算步骤_人工智能_104

计算得到新的 神经网络的计算步骤_人工智能_38 的值,然后再进行前向传播的到新的 神经网络的计算步骤_数据_36

  • 人工神经网络就是一个多层的复合函数。
  • 这种复合函数求偏导时是不能直接对 神经网络的计算步骤_数据_107 求偏导,只能对中间函数求依次求偏导从而得出 神经网络的计算步骤_数据_107 的偏导数,即链式法则。
     

5、更新权重偏置:梯度下降法学习,最小化误差

所谓学习,就是最小化误差的处理。

以最小的神经网络举例,给定一个样本(1, 0) 训练。

  • 单样本的误差平方函数:神经网络的计算步骤_数据_109
  • 损失函数为:神经网络的计算步骤_人工智能_110

损失函数图像:

神经网络的计算步骤_神经网络_111

一开始有一个初始值(左边的红点),我们需要找到最合适的w(谷底的w),使J最小。

那如何自动找到这个谷底呢?

神经网络的计算步骤_损失函数_112


当寻找点在左边时,梯度是负数,在右边时,梯度是正数。

梯度下降公式:神经网络的计算步骤_人工智能_113

  • 神经网络的计算步骤_损失函数_114:变化比例,w变化时,J相应变化多少

神经网络的计算步骤_损失函数_115

  • 点在左边时,梯度是负的,负负得正,w会增加,体现在图中是在 x 轴向右方向走
  • 点在右边时,梯度是正的,w会减少,体现在图中是在 x 轴上向左方向走
  • 最终都会向谷底靠拢

除此之外,还有一个参数 a,代表学习率:

神经网络的计算步骤_神经网络_116


一般 a = 0.01,太高会造成震荡,在俩边跳来跳去;太小下降很慢。

 
梯度下降法的寻找思路是:粗调 + 精调。

  • 首先粗调:迭代步长要大,很快确定大致范围
  • 其次精调:迭代步长要小,速度很慢,确定精度

就好像用显微镜一样,粗体可以看到大致图像,精调可以看清楚图像。

神经网络的计算步骤_数据_117

具体步骤就是,先随机在曲线上找一个点,然后求出该点的斜率,也称为梯度。

顺着这个梯度的方向往下走一步,到达一个新的点之后,重复以上步骤,直到到达最低点(或达到我们满足的某个条件)。

如,对 神经网络的计算步骤_神经网络_31

  • 神经网络的计算步骤_神经网络_119
  • 神经网络的计算步骤_神经网络_120

其中 神经网络的计算步骤_损失函数_121 代表 “用后面的值更新”,神经网络的计算步骤_神经网络_122 代表学习率(learning rate),神经网络的计算步骤_损失函数_123 就是 神经网络的计算步骤_数据_36神经网络的计算步骤_神经网络_31

梯度下降法完整内容:《梯度下降法》。
 


输出层

项目驱动:《识别猫的项目》。


标签:输出,函数,导数,步骤,神经网络,计算,np,输入
From: https://blog.51cto.com/u_13937572/6439507

相关文章

  • 【体验有奖】玩转 AIGC,函数计算 x 通义千问预体验,一键部署AI应用赢Airpods
    玩转AIGC,基于函数计算FC部署通义千问预体验从文字生成到图片生成,AIGC的创造力让人惊叹,更多的人开始探索如何使用AI提高生产效率,激发更多创作潜能,然而在实际应用中,AI技术的高门槛让很多人望而却步,普通开发者和零编程经验的人是否也能简单快速地部署一个AI模型应用,享受到......
  • 虚拟机上安装nginx、openssl、pcre、zlib步骤
    1、下载相关组件:wget http://nginx.org/download/nginx-1.10.2.tar.gzopenssl是一个开源的实现加解密和证书的专业系统。wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gzopenssl是一个开源的实现加解密和证书的专业系统。wgethttp://downloads.sourcefo......
  • goland不提交git,同步代码到开发机,设置步骤
    1.Tools->Deployment->Configuration    2.Tools->Deployment->Uploadxxx ......
  • 神经网络:softmax激活函数
    softmax的作用:将多分类的输出值转换为范围在[0,1]和为1的概率分布soft反方词hardhardmax从一组数据中找到最大值softmax为每一个分类提供一个概率值,表示每个分类的可能性。所有分类的概念值之和是1.优点在x轴上一个很小的变化,可以导致y轴上很大的变化,将输出的数值拉开距离。在深......
  • Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测|附代码数据
    全文链接:http://tecdat.cn/?p=27279最近我们被客户要求撰写关于深度学习循环神经网络RNN的研究报告,包括一些图形和统计输出。此示例说明如何使用长短期记忆(LSTM)网络预测时间序列LSTM神经网络架构和原理及其在Python中的预测应用LSTM网络是一种循环神经网络(RNN),它通过循......
  • 计算机组成原理:指令系统、CPU数据通路信号(例题
    分析:由题目可知操作码占4位,所以支持的操作指令为\(2^4\)种指令操作数占6位,其中寻址3位,寄存器编号3位,所以最多有\(2^3\)个通用寄存器主存大小为128KB,机器字长为16位,且按字编址,所以有\(\frac{128KB}{2B}\quad=2^{16}\)个存储单元,即MAR至少16位机器字长为16为,那么MDR至少也......
  • QA|重写了元素定位后报错xx object has no attribute 'find_element'|网页计算器自动
    代码如下:1#basepage.py23fromseleniumimportwebdriver456classBasePage():7"""8基类用作初始化封装常用操作9"""1011def__init__(self):12"""13初始化driver14......
  • 计算机三级-信息安全技术-信息安全保障概述
    去年五月份报的信息安全技术,考试时间为2022.9.26,因为封校和疫情原因,没有参加上;在这些期间准备时间只能说是10天,10天好像就有点多,大概一周吧,能考个及格,所以当大家备考时一定要老早准备,并关注一些不可预测性的事件防止发生。下面是我所收集的知识点,望大家参考学习故不积跬步无以......
  • fmt方法练习(简易计算机)
    packagemainimport("fmt")funcmain(){//+-*/%vara1intvarb1intvarc1intfmt.Println("请输入整数")fmt.Scanln(&b1)fmt.Println("请输入1+2-3*4/5%")fmt.Scanln(&a1)fmt.Println("请输入整数"......
  • [转]解决WebService 测试窗体只能用于来自本地计算机的请求
    [转自]原文地址:https://www.cnblogs.com/JuneZhang/archive/2013/01/24/net.html问题:WebService部署成站点之后,如果在本地测试webservice可以运行,在远程却显示“测试窗体只能用于来自本地计算机的请求”或者"Thetestformisonlyavailableforrequestsfromthelocalma......