1、什么是深度学习?

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

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

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

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

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

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

3、1神经网络结构

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

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

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

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

则 , 然后通过激活函数relu为例,输出a

那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),它计算预测值与真实值之间的平方差的均值。均方误差可以表示为:

                                                         

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

3、3具体例子

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

我们把输入层看成一个矩阵,

卷积层也可以看成一个矩阵,

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

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

关于梯度知识:

梯度:

梯度的本意是一个

向量

(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大

值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

以下是loss与w11函数关系,matlab作图,就要找让loss最小。

w11new=w1-*w1*grad

是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)

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

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: