首页 > 其他分享 >带你从入门到精通——深度学习(四. 神经网络一)

带你从入门到精通——深度学习(四. 神经网络一)

时间:2025-01-17 23:28:10浏览次数:3  
标签:初始化 精通 入门 4.2 ReLU 神经网络 神经元 函数

建议先阅读我之前的深度学习博客,掌握一定的深度学习前置知识后再阅读本文,链接如下:

带你从入门到精通——深度学习(一. 深度学习简介和PyTorch入门)-CSDN博客

带你从入门到精通——深度学习(二. PyTorch中的类型转换、运算和索引)-CSDN博客

带你从入门到精通——深度学习(三. PyTorch中张量的形状重塑、拼接和自动微分)-CSDN博客

目录

四. 神经网络一

4.1 神经网络的概念        

4.2 激活函数

4.2.1 激活函数的概念

4.2.2 sigmoid函数

4.2.3 tanh函数

4.2.4 ReLU函数

4.2.5 softmax函数

4.2.6 其他常见激活函数

4.3 参数初始化

4.3.1 基础初始化方法

4.3.2 kaiming初始化和xavier初始化


四. 神经网络一

4.1 神经网络的概念        

        人工神经网络(Artificial Neural Network,ANN)是一种模仿生物神经网络结构和功能的计算模型,简称神经网络(Neural Network,NN)

        单个神经元的网络结构如下:

        单个神经元结构的最终输出的是经过激活函数后的各个输入xi的加权和

        多个神经元便构成了如下的神经网络结构:

        神经网络中信息从输入节点开始向前移动,通过隐藏节点,最终移动到输出节点,因此神经网络的基本架构为:输入层(即输入x的一层)、输出层(即输出y的一层)、隐藏层(输入层和输出层之间皆为隐藏层),这种网络结构也被称为全连接(full connected,FC)网络

        全连接网络的特点如下:

        1. 同一层的神经元之间没有连接。

        2. 第N层的每个神经元与第N - 1层的所有神经元相连(这也是全连接的含义),每一个连接都有一个自己的权重值(包含w系数和b系数)

        3. 第N - 1层神经元的输出就是第N层神经元的输入。

4.2 激活函数

4.2.1 激活函数的概念

        激活函数用于对神经网络每层的输出数据进行变换,为整个神经网络注入了非线性因素,使得神经网络可以逼近任意函数,加强了神经网络对复杂问题的拟合能力。

        而如果不使用激活函数,整个神经网络虽然看起来复杂,但究其本质依然属于一种线性模型,证明如下:

4.2.2 sigmoid函数

        在机器学习的逻辑回归章节有该函数的详解介绍,这里只做简要概括。

        sigmoid函数一般用于二分类任务的输出层,对于sigmoid函数来说,当输入值< -6 或者 > 6时,任何的输入值得到的激活值都是差不多的,这样会丢失部分的信息,因此该函数的有效区间为(-6,6),并且sigmoid函数容易出现梯度消失现象。

4.2.3 tanh函数

        tanh函数也叫双曲正切函数,它是一种奇函数,能够将输入值映射到(-1,1)之间,其函数表达式和导数表达式如下:

             

        tanh函数的函数图像与导数图像如下:

        由上图可知tanh函数的有效区间为(-3,3), 与Sigmoid相比,tanh的梯度相对较大,使得其收敛速度要比sigmoid函数快,能够减少有效迭代次数,但使用tanh函数作为激活函数同样也有梯度消失的风险。

4.2.4 ReLU函数

        ReLU函数的表达式如下:

        ReLU函数的函数图像和导数图像如下:

        ReLU函数将小于0的值映射为 0,而大于0的值则保持不变,使得它更加重视正信号,而忽略负信号,这种激活函数运算更为简单,能够提高模型的训练效率。

        当x < 0时,ReLU函数的导数为0,而当x > 0时,ReLU函数的导数恒为1,因此ReLU能够在x > 0时保持梯度不衰减,从而缓解梯度消失问题,然而,随着训练的推进,部分输入会落入小于0区域,导致其对应权重无法更新,这种现象被称为神经元死亡问题或者ReLU函数的死区问题

        ReLU函数是目前最常用的激活函数,其优势如下:

        1. 相对于sigmoid函数和tanh函数来说求导更为方便,在反向传播求参数的梯度时,计算量相对较小。

        2. 能够缓解梯度消失问题。

        3. ReLU函数会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

4.2.5 softmax函数

        softmax函数常用于多分类任务中,它是二分类任务的常用激活函数sigmoid在多分类任务中的推广,目的是将多分类的结果以概率的形式展现出来,其函数表达式如下:

        softmax函数能够将网络输出的logits(逻辑值)映射为值域在(0,1)之间的概率值,我们可以选取概率值最大的类别作为最终的预测类别。

        注意:softmax函数的所有输出值的总和必定为1(满足概率的性质)。

4.2.6 其他常见激活函数

        其他常见激活函数如下表所示:

        注意:神经网络的隐藏层通常优先选择ReLU激活函数;回归问题通常选择identity激活函数,即y = x的恒等映射。

4.3 参数初始化

4.3.1 基础初始化方法

        均匀分布初始化:初始网络参数从区间为(0,1)的均匀分布中抽样获得。

        正态分布初始化:初始网络参数从均值为0,标准差为1的高斯分布中抽样获得。

        全0初始化:将初始网络参数全部初始化为0。

        全1初始化:将初始网络参数全部初始化为1。

        固定值初始化:将初始网络参数全部初始化为某个固定值。

4.3.2 kaiming初始化和xavier初始化

        kaiming初始化,也称HE初始化,该初始化方法分为正态分布的kaiming初始化和均匀分布的kaiming初始化。

        正态分布的kaiming初始化:初始网络参数从均值为0,标准差为的高斯分布中抽样获得,其中n为输入神经元的个数

        均匀分布的kaiming初始化:初始网络参数从区间为的均匀分布中抽样获得,其中n为输入神经元的个数

        xavier初始化,该初始化方法也分为正态分布的xavier初始化和均匀分布的xavier初始化。

        正态分布的xavier初始化: 初始网络参数从均值为0,标准差为的高斯分布中抽样获得,其中n为输入神经元和输出神经元个数之和

       均匀分布的kaiming初始化:初始网络参数从区间为的均匀分布中抽样获得,其中n为输入神经元和输出神经元个数之和。  

        注意:在使用PyTorch框架构建网络模型时,每个网络层的参数都有默认的初始化方法。

标签:初始化,精通,入门,4.2,ReLU,神经网络,神经元,函数
From: https://blog.csdn.net/2401_86480334/article/details/145213548

相关文章

  • 【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31
    训练情况赛后反思模拟题差点红温,差一道字符串模拟题AKA题问一个数\(a\)加多少后的个位数变成\(b\),取出\(a\)的个位数,再用\(b\)去减,如果小于零答案再加十。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve()......
  • C#数据结构与算法入门实战指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典十大......
  • 轻量级卷积神经网络 (OL-CNN)
    优化后的轻量级卷积神经网络(OL-CNN)目录优化后的轻量级卷积神经网络(OL-CNN)一、模型背景及动机二、模型创新点1.深度可分离卷积2.动态学习率调整3.网络架构优化三、模型网络结构四、代码实现五、实验结果与结论一、模型背景及动机随着......
  • 【大数据】机器学习------神经网络模型
    一、神经网络模型1.基本概念神经网络是一种模拟人类大脑神经元结构的计算模型,由多个神经元(节点)组成,这些节点按照不同层次排列,通常包括输入层、一个或多个隐藏层和输出层。每个神经元接收来自上一层神经元的输入,通过加权求和和激活函数处理后将结果传递给下一层。2.数......
  • C语言新手入门---分支与循环(下)
    前言&概括鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。浅浅讲一下怎么使用C语言三种循环结构的语句:whilefordo…while1、while循环(1)if语句和while语句在形式上的对比两者在语法结构上基本都是一致的,再度提醒if无{}只能管理紧邻的一个句子。if(exp1){语句}while......
  • C语言新手入门---分支与循环(上)
    前言鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。编程里的分支结构要理解其实也就是数学里的树状图,把所需要的情况一点点根据数据分类好,再用编程语言的语法写好就行。一、if语句1、if本身用法如果判断表达式的结果为真(也就是表达式内容正确(或者说表达式返回的值非0),......
  • P1135 - 【入门】歌德巴赫猜想 -
    难度:4-题目描述任一个大于等于4的偶数都可以拆分为两个素数之和。(5.1.40)输入格式一个整数n(4<=n<=200)输出格式将小于等于n的偶数拆分为2个质数之和,列出所有方案!输入数据110输出数据14=2+26=3+38=3+510=3+710=5+5代码:#include<iostream>usingname......
  • SQL注入(非常详细)零基础入门到精通,收藏这一篇就够了
    前言之前一直有粉丝朋友,在挖漏洞过程中使用到SQL注入,希望大白给他讲解一些的SQL注入,今天大白也特地给粉丝朋友安排好了SQL注入攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注。可显注入攻击者可以直接在当前界面内容中获取想要获得的内......
  • 2025实战指南大模型AI产品经理:从零基础到精通的详细步骤与技巧,一文收藏即可开始学习!
    随着人工智能技术的发展,尤其是大模型(LargeModel)的兴起,越来越多的企业开始重视这一领域的投入。作为大模型产品经理,你需要具备一系列跨学科的知识和技能,以便有效地推动产品的开发、优化和市场化。以下是一份详细的大模型产品经理学习路线,旨在帮助你构建所需的知识体系,从零基......
  • 如何入门编程
    编程入门之路:从新手到开发者编程就像学习一门新语言,最开始总是有些让人畏惧。但当你开始理解那些字母组合的真正含义时,便会领悟到其美妙之处。那么,你准备好踏上这条旅程了吗?今天,我们将一起探讨如何顺利入门编程,打下坚实的基础,最终成为一名出色的开发者。选择合适的编程语......