百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

了解损失函数,激活和优化

toyiye 2024-06-21 12:08 8 浏览 0 评论

损失函数

损失函数是输出标量值的目标函数,它能让我们了解我们的预测值与原来的预测值有何不同。这些目标函数发现谓词与原始输出之间的差异。在构建神经网络模型时,选择这些损失函数是关键任务。如果我们选择了一个错误的损失函数,它就会破坏我们神经网络模型的结构。

根据神经网络执行的任务,有不同类型的损失函数可用。人们已经声明了以下任务:这些损失函数最有效:

  • 二元分类:二元叉熵函数
  • 多元分类:分类交叉熵函数
  • 回归:均方误差函数
  • 等等…

让我们更详细地了解每一个损失函数:

  • 交叉熵损失函数:这是损失函数,根据0到1之间的输出概率来评估分类模型的性能。交叉熵也称为对数损失。当我们的预测值偏离ground truth标签时,交叉熵损失会增加。假设你有一个神经网络用于二元分类,比如Dogs vs Cats,我们的最后一层,也就是我们的神经网络的输出层将包含每个例子中两个类的概率。每个概率都在0到1之间,所有的可能之和等于1。这里的输出层使用Softmax激活函数。所以我们最好的预测是对数损失0,而预测的值远离ground truth会有很大的对数损失。假设要预测的类数为M,则:

If M = 2:

log_loss = -(orig*log(predict) + (1-orig)*log(1-predict))

If M > 2:

log_loss = ∑(orig * log(predict)) from P of E = 0 to M

Where, P = Correct probability for example E

E = Example

  • 均方误差(MSE):这个函数也称为L2损失。它是原始值和预测值差的平方的总和。

l2_loss = ∑(predict - orig)**2 from 0 to n

  • 平均绝对误差(MAE):这个函数也称为L1损耗。它是对原始值和预测值的绝对差值求和。与L1的损失相比,L2的损失对离群值高度敏感,但L1的损失更为稳健。L2损失对离群值是敏感的,因为如果预测值与原始输出不匹配,那么这些差的平方就会很大。由于L1的损失取的是原始值和预测值之间的差的绝对值,所以它对错误的预测并不那么敏感。

l1_loss = ∑ |predict - orig| from 0 to n

激活(ACTIVATIONS)

激活是任何激活函数的输出。任何神经网络层将给定输入与当前层的权重相乘,并向该乘积添加偏差,即线性运算。这种线性操作称为中间激活。由于这些中间激活只需要学习一个简单的线性决策边界,所以为了学习复杂的决策边界,我们将非线性添加到这个中间的激活中,这只是将非线性函数应用于这些中间激活。有许多非线性函数,如sigmoid, ReLu, Leaky ReLu, tanh等,这些被称为激活函数。这些激活函数的输出称为激活。

For hidden layer:

W = Weights (shape = p x f)

X = Inputs (shape = f x n)

B = bias

intermediate_activation = W*X + B = Z

Let,

sigmoid activation function F(z) = 1/(1+e^-z)

A = F(Z) = F(W*X + B)

Here A is called as Activation.

优化

神经网络可以通过多种方式进行优化。超参数调整,小批量梯度下降,批量归一化等是用于优化神经网络的一些技术。

Mini-Batch梯度下降允许我们在许多示例中执行高效计算。在该方法中,大小为m的整个数据集被分成批量大小的bs。因此,批次总数是

Total no. of batches = m / bs

在Mini-Batch中,计算梯度下降模型误差,并且仅在每个小批量结束时更新权重。实施可以变化,以获取批次上所有梯度的总和,或者取批次中所有梯度的平均值。该方法在随机梯度下降(每个例子更新的权重)和批量梯度下降(每个epoch之后更新的权重)之间给出平衡。最快的学习是在Mini-Batch梯度下降。

设置适当的批量大小:

Let M = total no. of samples

For M <= 20,000:

Use batch-gradient descent

For M > 20,000:

set bs = 4, 8, 16, 32, 64, 128, 256, 512

改进梯度下降的另一种更好的方法是使用momentum、RMSprop和ADAM算法。这些是梯度下降优化算法,用来加速收敛到全局最小。掌握指数加权平均数可能有助于更清楚地了解这些优化算法是如何工作的。

加权平均:

  • 加权平均数是对给定问题中不同类型的对象计算的平均数。
  • 它取决于特定类型的对象的数量。
  • 一般来说,加权平均值更接近于具有更多数量的对象类型。

指数加权平均:

Let Vt be the average of current instance.

In general,

Vt = β*Vt-1 + (1-β)*θt

Where,

Vt = Current average

Vt-1 = Previous average

β = Parameter for optimisation of Vt

θ = Current Value

上面的等式告诉我们,为了计算Vt,我们需要Vt-1,这是先前的平均值。

使用momentum的梯度下降:

  • momentum可以用来增加梯度下降的收敛速度。
  • momentum的步骤:

Compute dW, dB

VdW = β1*VdW + (1-β1)*dW

Vdb = β1*Vdb + (1-β1)*db

W = W - α*Vdw

B = B - α*Vdb

  • 在正常梯度下降中,随着学习速率低,沿垂直轴(振幅)的振荡低,因此收敛慢。

  • 如果我们提高学习率,这将导致采取更大的steps ,并必然导致divergence。

  • 在上述情形下,振荡即垂直轴(振幅,有助于采取更大的步长)变得更高,导致发散。
  • 为了避免上述情况,使用momentum算法即梯度下降的指数加权平均来减小垂直轴的振荡,保持沿水平轴常数的收敛始终是一个更好的选择。

使用RMSprop的梯度下降:

这是一种梯度下降优化算法,就像“momentum”一样。

SdW = β2*SdW + (1-β2)*dW2

Sdb = β2*Sdb + (1-β2)*db2

W = W - α*(dW/√(Sdw + ε))

b = b - α*(db/√(Sdb + ε))

Where,

ε = 10^-8

使用ADAM进行梯度下降:

它是momentum和RMSprop的结合。

VdW = β1*VdW + (1-β1)*dW

Vdb = β1*Vdb + (1-β1)*db

SdW = β2*SdW + (1-β2)*dW^2

Sdb = β2*Sdb + (1-β2)*db^2

Adding bias correction to Vdw Vdb Sdw Sdb:

Vdwcorr = Vdw/(1 - βt1`) Vdbcorr = Vdb/(1 - βt1`)

Sdwcorr = Sdw/(1 - βt2`) Sdbcorr = Vdb/(1 - βt2`)

Updating weights:

W = W - (α*Vdwcorr )/√(Sdwcorr + ε)

S = S - (α*Vdbcorr )/√(Sdbcorr + ε)

指数加权平均值的偏差校正由下式给出:

Vt = Vt / (1 - βt)

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码