深度学习总结(stage1)

2023-10-18 14:10
文章标签 学习 总结 深度 stage1

本文主要是介绍深度学习总结(stage1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.线性分类与感知机

1 线性回归问题

(1) 回归定义: 回归是能为⼀个或多个⾃变量与因变量之间关系建模的⼀类⽅法。在机器学习领域中的⼤多数任务通常都与预测有关。当我们想预测⼀个数值时,就会涉及到回归问题。常⻅的例⼦包括:预测价格(房屋、股票等)、预测住院时间(针对住院病⼈等)、预测需求(零售销量等).

(2) 回归要素:训练集输出数据假设函数,举一个实际例子,我们希望根据房屋的⾯积和房龄来估算房屋价格,为此需要收集一个真实的数据集,这个数据集包括了房屋的销售价格、面积和房龄。这个数据集就是训练集,训练集中的每一行数据称为样本,我们把试图预测的房屋价格称为输出数据,这个例子中的假设函数可以表征为下面的式子:

(3) 问题拓展:在机器学习中,通常使用的是高维数据,建模时采用线性代数表示方法会比较方便。当我们的输入包含d个特征时预测结果通常可以表示为:

将所有的特征放到向量x中,并将所有的权重放到向量w中,可以采用点积的形式来简洁的表示模型:

(4) 损失函数:损失函数就是用来确定模型拟合数据的度量。损失函数能够量化目标的实际值与预测值之间的差距,通常选择非负数作为损失函数,且数值越小表示损失越小,完美预测时的损失为0.在回归问题中常用的损失函数时平方误差损失函数(MSELoss)。当样本i的预测值为yˆ(i),其相应的真实标签为y(i),平方误差可以定义为以下公式:

找到一组权重w使得损失函数最小就是我们的目标,这样模型的预测值可以达到比较精确的程度。

2 线性二分类问题

(1) 定义:线性分类器通过特征的线性组合来做出分类决定,以达到此种目的。简单说,样本通过直线可分。以苹果分类为例:

其中有两个特征,横轴是苹果的直径,纵轴是苹果的外观评价。对于线性分类器来说,输入的是特征向量,输出的是类别,如果是二分类问题,则输出为0或1,或者是属于某类的概率,即0-1之间的数

(2) 与线性回归的区别:

输出意义不同:属于某类的概率<->回归具体值

参数意义不同:最佳分类直线<->最佳拟合直线

(3) sigmoid函数:在二分类问题中,为了最终获得0-1之间的概率,我们构造了sigmoid函数如下:

其中z就是输入的线性组合,不难看出sigmoid函数的值域在0-1之间,模型输出的z越大,经过sigmoid的映射后输出越接近1。

(4) 二分类问题的损失函数:对于二分类问题一般使用交叉熵当损失函数,交叉熵简化为Binary Cross Entropy即:

同时采用sigmoid对输出z进行映射,并且损失函数选择为BCELoss,此时的二分类模型称为Logistic Regression(逻辑回归),虽然叫做回归,但实际上是一种分类模型。

3 多分类问题

对于多分类问题,模型的输出单元一下变成了多个,通过引入softmax运算使得输出更适合离散值的预测和训练。如果不使用softmax,直接使用输出有两个问题。一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。另一方面,由于真实的标签值都是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。因此softmax的使用很有必要。softmax的运算如下式:

其中o代表模型的输出值,经过softmax的映射变为y,并且根据下面这个式子可以知道softmax运算是不改变预测类别的输出的

损失函数的选择上依然选择交叉熵损失函数,此时多分类的模型就叫softmax回归,虽然名字依然是回归,但是是一种分类模型,可以看到与Logistic Regression(逻辑回归)的区别是,对模型输出之后映射函数的选择不同,二分类模型使用sigmoid,而多分类模型使用softmax

4 多层感知机

上文介绍了线性回归、logistic回归和softmax回归,但它们都是单层的神经网络,这些模型能通过单个的仿射变换将我们的输入映射到输出,如果我们的标签通过仿射变化后确实与我们的输入相关,那么这种方法确实足够了。但是,仿射变换中的线性是一个很强的假设,在很多时候,线性假设是荒谬的。我们可以在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型,这种架构通常称为多层感知机(MLP),如下图:

这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。输入层不涉及任何计算,因此使用此网络产⽣输出只需要实现隐藏层和输出层的计算。因此,这个多层感知机中的层数为2。注意,这两个层都是全连接的。每个输入都会影响隐藏层中的每个神经元,而隐藏层中的每个神经元⼜会影响输出层中的每个神经元。为了发挥这种架构的潜力,还需要一个额外的关键要素,在仿射变换之后对每个隐藏单元应用非线性的激活函数,有了激活函数之后,我们的多层感知机就不会退化成线性模型,通过这种一层又一层的堆叠隐藏层,就可以获得更有表达能力的模型。

二. BP网络

1 多层前馈网络及BP算法概述

(1) BP算法简介:多层前馈网络的反向传播(BP)学习算法,简称BP算法,他是梯度下降法在多层前馈网络中的应用。

(2) BP神经网络结构:见图,u、y是网络的输入、输出向量,神经元用节点表示,网络由输入层、隐层和输出层节点组成,隐层可一层,也可多层(图中是单隐层),前层至后层节点通过权联接。由于用BP学习算法,所以常称BP神经网络.

(3) 反向传播和正向传播:正向传播是输入信号从输入层经隐藏层,传向输出层,若输出层得到了期望的输出,则学习算法结束,否则转至反向传播。反向传播是将误差(样本与网络输出之差)按原连接通路反向计算,由梯度下降法调整各层节点的权值,使误差减小。

2 BP算法详细介绍

BP算法基本思想:

BP算法的基本流程:

BP算法评述:

优点:学习完全自主,可以逼近任意的非线性函数

缺点:算法非全局收敛,收敛速度比较慢,学习率的选择以及神经网络的设计都是问题。

三.性能优化(优化器)

上面介绍了通过BP算法获得了梯度信息,接下来就要使用梯度实现对各层权重的更新,这也正是优化器的作用,一言以蔽之,优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向更新合适的大小,使得更新后的各个参数让损失函数(目标函数)值不断逼近全局最小。接下来介绍常见的优化器。

1 SGD优化器

随机梯度下降法(SGD)每次从训练集随机选择一个样本来进行学习,SGD没有动量的概念,SGD的参数更新公式如下:

优点:由于每次只用一个样本更新模型参数,更新速度快;SGD所带来的波动有利于优化的方向从当前的局部极小值点跳到另一个更好的局部极小值点,这样对于非凸函数,最终收敛于一个较好的局部极值点,甚至全局极值点。

2 动量法(Momentum算法)

Momentum算法在原有的梯度下降法中引入了动量,从物理学上看,引入动量比起普通梯度下降法主要能够增加两个优点。首先,引入动量能够使得物体在下落过程中,当遇到一个局部最优的时候有可能在原有动量的基础上冲出这个局部最优点;并且,普通的梯度下降法方法完全由梯度决定,这就可能导致在寻找最优解的过程中出现严重震荡而速度变慢,但是在有动量的条件下,物体运动方向由动量和梯度共同决定,可以使得物体的震荡减弱,更快地运动到最优解。

更新公式如下:

3 自适应梯度算法(AdaGrad算法)

我们使用自适应的学习率就可以帮助算法在梯度大的参数方向减缓学习速率,而在梯度小的参数方向加快学习速率,这就可以促使神经网络的训练速度的加快。

参数更新公式如下:

4 RMSProp算法

RMSProp算法主要是用来改进AdaGrad算法在训练后期,学习率过小的问题。先来看参数更新公式:

可以看到,对于一个变换较大的方向其dw会很大,导致dw2很大,所以分母会变大,所以整个分式会变小,可以减缓这种变化,同理,若变换较小的方向,dw很小,可以加速这种变化。

5 Adam算法

Adam算法就是结合了momentum梯度下降法和RMSprop梯度下降法的方法,更加的适用于大多数的情况,参数更新过程如下:

一般的,让β1=0.9,β2=0.999即可。当然学习率α要自己调整。

这篇关于深度学习总结(stage1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233081

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa