深度学习总结(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

相关文章

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3