深度学习—神经网络

深度学习是机器学习的一个分支,侧重于处理图像和音频等非数值数据。特征提取在机器学习中需要手动完成,而在深度学习中通过多层神经网络自动进行。深度学习需要大量数据和计算资源,常用算法包括神经网络、感知机、softmax回归等。训练过程涉及损失函数如交叉熵,优化方法如梯度下降和随机梯度下降。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习与机器学习的区别

深度学习由机器学习中的神经网络发展而来,机器学习多用于处理数值数据,而深度学习还可处理图片、音频等数据。

d556e8a749214fd7d1dccfea4c1e5c1b.png

特征提取方面 

  • 机器学习的特征工程步骤需要靠手动完成,需要大量专业领域知识。
  • 深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,将数据从一层传递到另一层来构建更复杂的模型,通过训练大量数据自动得出模型而不用人工特征提取。

数据量和计算性能要求 

机器学习需要的执行时间远少于深度学习,深度学习的参数往往很庞大,需要通过大量数据的多次优化来训练参数。

ca1d3239113fdd9fde433194ddf06228.png

算法代表 

  • 机器学习

           朴素贝叶斯、决策树等

  • 深度学习

           神经网络

神经网络

人工神经网络(Artificial Neural Network,简写为ANN)也简称为神经网络(NN)。它是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的计算模型。经典的神经网络结构包括三个层次的神经网络,分别为输入层、输出层以及隐藏层。

0f0146a093e265d7186613f2cbfaf244.png

其中每层的圆圈代表一个神经元(以前也称之为感知机),隐藏层和输出层的神经元由输入的数据计算后输出,输入层的神经元只是输入。

神经网络的特点 

  • 每个链接都有权值
  • 同一层神经元之间没有连接
  • 最后的输出结果对应的层也称之为全连接层

感知机(PLA:Perceptron Learning Algorithm)

感知机就是模拟大脑神经网络处理数据的过程。

3fb998d06083fc9a0d1b864a9250ca31.png

感知机是一种最基础的分类模型,类似于逻辑回归,不同的是,感知机的激活函数用的是sign,而逻辑回归用的是sigmoid。感知机也具有连接的权重和偏置。

eq?u%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7Dw_%7Bi%7Dx_%7Bi%7D+b

eq?y%3Dsign%28u%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20+1%2C%20u%3E0%20%26%20%5C%5C%20-1%2C%20u%5Cleqslant%200%26%20%5Cend%7Bmatrix%7D%5Cright.

softmax回归 

Softmax回归将神经网络输出转换成概率结果。

eq?softmax%28y%29_%7Bi%7D%3D%5Cfrac%7Be%5E%7By_%7Bi%7D%7D%7D%7B%5Csum_%7Bj%3D1%7D%5E%7Bn%7De%5E%7By_%7Bi%7D%7D%7D

52155840570822183fc897c1829a86b0.png

8de5e7522e02fe5c0b7db8271c74ef91.png

交叉熵损失 

09aba9068f3e9d84710c11006a301192.png

神经网络最后的损失为平均每个样本的损失大小。

简单前向传播

5e066a7302f10f82cefb9a773aa8bacf.png

首先随机生成一些权重w,然后根据w*x分别得出3.2、5.1、-1.7的得分,然后将得分用eq?y%3De%5E%7Bx%7D函数进行指数级的扩大(放大差距),然后再归一化变成[0,1]的数即可当成概率。同时用eq?y%3D-logx函数来表示损失(因为归一化的数在[0,1]之间,当x在[0,1]时-log在eq?%5B0%2C+%5Cinfty%29,x越小其-log越大即概率越小损失越大可以此表示损失)。

简单反向传播

5f0ea98a228ec17d12610800355036c1.png

由于最开始的权重是随机生成的,难免不贴合,所以反向传播做的就是根据损失去不断更新权重(通过计算损失对权重的导数)以达到贴合的效果即找到一组权重组合使得损失最小。

梯度是所有偏导数构成的​​向量,其方向指向损失增长最快的方向。

eq?%5Calpha学习率,负号表示沿损失减小方向调整。

随机梯度下降(SGD)

随机梯度下降(Stochastic Gradient Descent)。梯度eq?%28%5Cfrac%7B%5Cpartial%20cost%7D%7B%5Cpartial%20w%7D%29下降(与牛顿迭代法类似都是迭代求解)是拿所有样本的平均损失来作为梯度下降的依据,容易陷入局部最优,而随机梯度下降是所有样本中随机取一个样本即拿单个样本的损失来作为梯度下降的依据,这样可能会跨越局部最优达到更优的点。 

c4d7c6c65f2b4cb9ba0bfc09ca4b3a32.png

c836470820c88cbb1e27e780f2e82075.png

 梯度下降更新权重66b848e8a9aea424b083c9b4f3e4b995.png

随机梯度下降更新权重

28d029c282b54b09cbccaec7057ee948.png

可见虽然随机梯度下降效果更好但时间复杂度更大(简单的来看一个是一重循环一个是双重循环),在实际中一般采用折中处理,即在N的样本中选取n个做相应的梯度然后更新w,即分成一批一批batch,n即后面所谓的batch_size

几种损失函数的代码示例:

import torch
from torch.nn import L1Loss
from torch import nn

inputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)

inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))

#L1Loss平均绝对误差,reduction默认是mean求均值,sum则直接累加
loss = L1Loss(reduction='sum')#(1-1)+(2-2)+(5-3)=2
result = loss(inputs, targets)

loss_mse = nn.MSELoss()#平方损失函数,(1-1)^2+(2-2)^2+(5-3)^2=4/3=1.3333
result_mse = loss_mse(inputs, targets)

print(result)
print(result_mse)


x = torch.tensor([0.1, 0.2, 0.3])
y = torch.tensor([1])
x = torch.reshape(x, (1, 3))
loss_cross = nn.CrossEntropyLoss()#交叉熵损失
result_cross = loss_cross(x, y)
print(result_cross)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北边一颗小星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值