带你入门深度学习与神经网络

本文介绍了深度学习的基本概念,强调了神经网络在其中的作用,特别是多层隐藏层的特征学习。详细讲解了反向传播算法用于调整权重以优化损失函数的过程,并以Python的PyTorch库为例,展示了神经网络模型的构建和梯度更新的步骤。
摘要由CSDN通过智能技术生成

1、什么是深度学习?

         深度学习是一种机器学习的分支,它建立在人工神经网络的基础上。深度学习通过多个处理层(也称为隐藏层)对数据进行表征学习,以便可以使用非线性变换和高级抽象来提取复杂特征。

2、神经网络与深度学习关系

1、神经网络是深度学习的基本模型之一,深度学习则是在神经网络的基础上发展起来的一种方法。

2、可以说,神经网络是深度学习的基础框架,而深度学习则是在神经网络的基础上进行更深层次、更复杂的学习和模式识别。

3、深度学习的特点是能够自动学习和提取特征,无需手动设计特征,适用于各种大规模、复杂的数据集和任务。(ps:这一点就是深度学习和机器学习最大不同)

3、手撕一个神经网络模型

3、1神经网络结构

好了,这就是一个全连接神经网络,我们可以发现,输入层,输出层。

那接下来,我带你们看其中一个中间隐藏层一个神经元:

那么这个神经元它是怎么工作呢?

w1,w2,w3,w4是权重,也就是说x1,x2,x3,x4对这个a隐藏输出影响程度

则 z=w1*x1+w2*x2+x3*w3+x4*w4+b, 然后通过激活函数relu为例,输出a

a=Relu(z)

那relu函数是什么呢?(matlab实现图像)

x = linspace(-10, 10, 100);
y = max(0, x);
plot(x, y, 'LineWidth', 2);
xlabel('x');
ylabel('ReLU(x)');
title('ReLU函数');
grid on;

3、2反向传播

输入层,输出层都是确定的,那么怎么调节w权重呢?就要找让损失下降的参数,

在神经网络中,损失(loss)是用于衡量模型预测输出与实际标签之间差异的指标。损失函数是一个数学函数,它接收模型的输出和实际标签作为输入,并计算它们之间的差异。

常见的损失函数包括均方误差(Mean Squared Error, MSE)、交叉熵(Cross Entropy)和对数损失(Log Loss)等。

例如,在回归问题中,常用的损失函数是均方误差(MSE),它计算预测值与真实值之间的平方差的均值。均方误差可以表示为:

                                                          \frac{1}{n}\sum\left ( yreall-youtput \right )^{2}

y_reall 是y应该输出的,也就是真实值,y_output是通过w参数实际输出的,接下来我们都用一个样例,n=1.

3、3具体例子

如图所示神经网络,b设置为0,Relu为激活函数,a=2,b=3,y1=5,求y1输出,调整参数w11,求梯度。

我们把输入层看成一个矩阵,\begin{bmatrix} a\\ b \end{bmatrix}

卷积层也可以看成一个矩阵,\begin{bmatrix} x\\ y\\ z\\ \end{bmatrix}

接下来我们为权重设置参数编码,w11=1,w21=1 其余都是0,那我们编码规则是什么呢?

以W21为例,2代表卷积层所在矩阵行数,1代表卷积层所在矩阵行数,第一个参数是卷积层,第二个参数是输入层。

关于梯度知识:

梯度: 梯度的本意是一个 向量 (矢量),表示某一函数在该点处的方向导数沿着该方向取得最大
值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
以下是loss与w11函数关系,matlab作图,就要找让loss最小。

w11new=w1-\alpha*w1*grad

\alpha是learning_rate, grad是梯度,为什么用减号呢?

答:因为我们要找到loss最小,假如w11在随便某点,怎么找呢,就像爬上坡一样,假如你在一个山坡,随便一个位置,我们就要走一小步,图像也是一样,那怎么算一小步呢,深度学习里学习率就是调整步调大小参数。

那好了,我们就开始算这个神经网络:

3、4pytorch框架实现

import torch

x1 = torch.tensor(2.)
x2 = torch.tensor(3.)
Y = torch.tensor(5.)
w11, w21, w1, w2 = torch.tensor([1., 1., 1., 1.], requires_grad=True)
w12, w22, w31, w32, w3 = torch.tensor([0., 0., 0., 0., 0.], requires_grad=True)
w11.retain_grad()


def relu(x):
    if x > 0:
        return x
    else:
        return 0


z1 = w11 * x1 + w12 * x2
a1 = relu(z1)
z2 = w21 * x1 + w22 * x2
a2 = relu(z2)
z3 = w31 * x1 + w32 * x2
a3 = relu(z3)
y = w1 * a1 + w2 * a2 + w3 * a3
y = relu(y)
loss = y - Y
loss = pow(loss, 2)
loss.backward()
print(w11.grad)
w11 = w11 - 0.001 * w11.grad
print(w11)

好啦,这就是一个神经网络学习过程,大家不会的欢迎私信或者评论!!!

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值