Lecture4 神经网络与反向传播(2)

CS231n Lecture 4: 神经网络和反向传播 Lecture 4 神经网络和反向传播 Lecture 4: 神经网络和反向传播 神经网络 线性分数函数:f=Wx+bf=Wx + bf=Wx+b 2层神经网络: f=W2max(0,W1x+b1)+b2f = W_2max(0,W_1x + b_1) + b_2f=W2​max(0,W1​x+b1​)+b2​ 在这里,更精确地来说,应该叫做全连接神经网络(FC) 在两层神经网络中,使用了非线性激活函数ReLU。如果不使用非线性激活函数的话,最后会变为 在这种情况下,设 因此,实质上还是单层神经网络,不管 阅读详情

1. 结构总览

(1)常规神经网络:

        对于普通的神经网络,首先收到输入数据,然后通过若干的隐藏层的转换得到输出。每个隐藏层是由一组神经元组成的,并且这些神经元与前一层进行全连接。在单层中的每个神经元都是完全独立的,不会与其他神经元共享任何连接。最后一个全连接层又称为输出层,在分类任务中,它代表了每个类别的得分。常规的神经网络不能很好地扩展到整个图像。在CIFAR-10数据集中,图片的大小只有32*32*3 ,所以全连接的神经网络在第一个隐藏层中就需要32*32*3=3072个权重,这看起来还是可以接受的一个数据量,但是如果图片更大,常规的神经网络就不能很好地使用了。显然易见的是,全连接这样的形式带来参数量巨大的问题, 会导致性能的浪费和过拟合问题。

(2)3维的神经元:

        卷积神经网络充分利用输入是由图片组成的这一条件,用一种更为合理的方式构造网络结构。具体来说,不同于普通的神经网络,卷积神经网络每一层的神经元具有三个维度:长、宽、深度(这里的深度不是指网络的深度,而是神经元可表示的一个维度)。还是以CIFAR-10数据集为例,每张图片大小为 32*32*3,也就意味着输入的体积为 32*32*3,不同于常规神经网络将其展开成一个 3072 的向量,卷积神经网络中,保持输入图片的空间结构,以 32*32*3的形式输入。并且在后面的介绍可以了解到,不同于常规神经网络的全连接,卷积神经网络中的神经元只会和前一层中的一个很小的区域进行连接。此外,最后的输出层是一个 1*1*10 的结构,也就是说在最后,我们会将整个图片缩减成一个表示类别得分的向量。

        下图是常规神经网络和卷积神经网络处理的可视化流程:

 

2. 卷积神经网络的层

  • 最简单的卷积神经网络的结构就是多个层的排列,用于将图片转换成输出值(分类问题中就是每个类别的得分)
  • 有很多种不用的层,比如常见的卷积层、全连接层、激活层、池化层
  • 每一层都接受一个3维的量然后通过一个可微函数转换成输出值
  • 有些层有参数,有些没有,比如全连接层、卷积层有参数,而激活层和池化层没有
  • 有些层有额外的超参数,而有些没有,比如全连接层、卷积层、池化层有,而激活层(RELU)没有

2.1 卷积层

        卷积层是卷积神经网络中的核心组成,它使得网络的计算性能有了巨大的提升。

(1)概述:

        每个卷积层的参数是由一组可学习的过滤器(filter)组成的,每个过滤器在空间上是小的(长和宽小),但是在输入量的深度上进行了完整的延伸。比如说,在第一个卷积层中比较典型的过滤器大小为 5*5*3,即在长宽方向上只占了5个像素,但是在深度上占据了输入的全部(输入为图像,所以深度表示通道,为3表示RGB3通道)。在前向传播的过程中,我们将过滤器在输入量上进行充分的滑动,并且计算过滤器和输入量上对应部分的点积。当我们完成过滤器在宽和高上的滑动后,我们得到一个关于输入量的2维激活映射,作为过滤器在输入量的空间上每个位置的处理结果。直觉上来说,神经网络会对过滤器进行学习,使得过滤器在第一层卷积层中看到某些视觉上的特征或者一些特定颜色的斑点时会发生激活,或者在最终的深层网络中能够对一些图案或者模板发生激活。每一个过滤器都会产生一个2维的激活映射,在某一层中可能有多个过滤器,将他们生成的激活映射堆叠起来组成深度上的维度,并作为输出传递到下一层中。

(2)生物大脑视角:

        每一个3维的输出也可以看成是大脑中神经元的输出,他们只会观察输入的某个很小的区域,并且与左边和右边的神经元共享参数(在卷积神经网络中,通过使用同一个过滤器在输入数据上移动来实现参数共享)。

(3)局部连接:

        当我们要处理例如图像这样的高维数据时,我们发现使用全连接的神经元是不切实际的,取而代之,我们让神经元只和输入的一个局部区域相连。这种在空间范围上的连通性是一个被称为神经元的感受野(receptive field)的超参数,它与过滤器的大小等价。在深度这一坐标轴上的连通性永远和输入的深度相同。需要特别重申的一点是,过滤器采用非对称的形式处理空间上的维度和深度上的维度:在空间上(宽和高)只与局部的2维空间进行连接,而在深度维度上贯穿输入数据的整个深度。比如说,输入的数据维度为 32*32*3,如果感受野为 5*5,那么在这一个卷积层上的神经元参数为5*5*3,其第三个维度必须为3,因为输入的数据深度为3。

(4)输出的空间尺度:

        我们已经介绍了每个卷积层上的神经元如何连接,但是还没介绍每一层有多少个神经元,也没介绍他们是如何排列的。这里有三个超参数控制他们的排列,深度、步长、0填充,我们依次介绍:

  • 深度表示的是该层输出的深度,这也是一个超参数,它在数值上等于该层过滤器的个数,每一个过滤器将会学习去识别输入数据中的一个特征。
  • 我们还要确定步长,这指的是滑动过滤器时的步长,当步长为1时,我们每次将过滤器滑动一个像素,步长越大,那么输出的空间尺度就会越小。
  • 0填充指的是在输入数据的空间尺度上向四周填充一圈0,这是一种控制输出数据空间尺度的方法。

        我们可以使用公式(W-F+2P)/S+1来计算输出数据的长或高的大小。其中 W 表示输入数据的尺寸, 表示感受野,即过滤器的大小,P 表示0填充的圈数, S 表示步长。需要说明的是,一般情况下输入数据和过滤器都是正方形,所以不区分长和高,如果不是正方形则需要分别计算。

(5)权值共享:
        权值共享用于控制卷积层中参数的数量,举例来说假设某个卷积层的输出为55 * 55 * 96 = 290400 ,那么也就是说有2090400个神经元,每个神经元代表一个过滤器,这里的每个过滤器固定和输入数据的某个区域相连接。假设过滤器的大小为11*11*3=363  ,再加上一个偏置项,那么也就是说这个卷积层的参数大小为290400*364=105705600,这是十分巨大的。但是我们稍加分析就可以将参数进行大幅减少,因为对于识别同一个特征的过滤器,他们是可以共享同一组参数的,因为某一特征可能会出现在图像的任何位置上,所以可以使用同一个过滤器去识别图像上的每一个区域是否出现该特征。这样由于输出为 55*55*96,所以说明该层识别了96个特征,那么也就只需要 96 * 11 * 11 * 3 = 34848 个权重,再加上偏置项96,这比原来大幅减少。

        如下图就是一些识别出来的特征示例:

        需要注意的是,在某些情况下权值共享是不适用的。权值共享是基于某些特征具有全局分布的特性,采用权值共享后,无论特征出现在图像的哪个位置都可以找到它。但是某些特征不具有全局分布的特性,其位置是相对固定的,比如说人脸识别,一般人的面部都集中在图像的中央,你可能期望不同的特征,比如眼睛特征或者头发特征可能(也应该)会在图片的某个特定的位置被学习。直观点来说,假设某个分类器如果识别到眼睛、鼻子、耳朵、嘴巴这几个特征就会认为这是一张人脸。那么如果一张图片中五官是打乱的,比如嘴巴在额头上,眼睛在下巴,这显然不是一张人脸,而权值共享会认为这是一张人脸,所以这种情况下不能使用权值共享,而应该采用局部连接层 Locally-Connected Layer,即每个位置的每个特征对应一组权值。

(6)以矩阵乘法的方式实现:

        指的注意的是,卷积操作实际就是在过滤器和输入的一个局部区域内做点积,利用这一事实,可以采用矩阵乘法来实现卷积层的前向传播:

  1. 首先将每个输入图片的局部区域展平成一个向量,这称为 im2col 操作。比如,如果输入的图片大小为227*227*3  ,然后使用一个大小为 11*11*3 的过滤器以步长为4进行卷积操作。那么,每次卷积操作都会将输入图片的一个大小为11*11*3的区域与过滤器进行运算,所以输入图片的每个局部区域展开后是一个列向量,大小为11*11*3=363 。根据公式计算,(227-11)/4+1=55,说明输出为空间大小为 55*55 的数据,而每个数据表示一次卷积运算的结果,所以一共有55*55=3025次卷积,也就是说有 3025 个输入图片上的局部区域被展平成列向量,当然,这些局部区域之间会存在很多的重复之处。我们将展平的列向量拼凑在一起组成一个 363*3025 的矩阵,命名为 X_col
  2. 卷积层的权值同样要被展平成行向量,比如说,如果有96个大小为 11*11*3 的过滤器,那么最终会得到一个 96*363 的参数矩阵,称为 W_row
  3. 那么这一层卷积层的输出就是对这两个矩阵进行矩阵乘法了,具体来说就是 np.dot(W_row, X_col),在我们的例子中,相乘后的结果为一个 96*3025 的矩阵。
  4. 将矩阵相乘的结果重新调整变成 55*55*96 的形式,就是最终的输出了。

        使用这一方法最大的缺点就是会占用大量的内存,但是其好处在于使用非常高效的矩阵乘法,可以提升计算的速度。

(7)反向传播:卷积层的反向传播同样也是一个卷积操作。

2.2 池化层

        周期性地在卷积层之间插入一个池化层在卷积神经网络的结构中是十分常见的。其作用是渐进地减小空间上的尺寸,以此来减小参数量以及计算量,因此,池化层也有控制过拟合问题的作用。池化层将 MAX 运行独立地作用在每一个输入的深度切片上,并且改变空间上的大小。最常见的池化形式为使用一个2*2的过滤器,以步长为2来进行下采样,这可以将宽度和高度同时减小一半,丢弃75%的内容。在这个例子中,每一个 MAX 操作都会对4个数字进行取max操作。深度上的尺寸保持不变。一般来说,常用的池化层有两个,第一种是上述2*2的池化层,还有一种是 3*3大小的过滤器,以步长为2进行池化。更大的过滤器可能会导致过多的破坏,一般不会采用。如下图,就是池化操作的示例。

 一般化的池化:

        除了最大池化使用max函数,池化层的每个单元还可以使用及其他函数来进行,比如平均池化核L2正则池化。平均池化在历史中被使用过,不过最近被证明了其效果比max池化差。

反向传播:

        在介绍反向传播那一篇文章中提到过,max操作对梯度的效果就是一个路由器,即将后方传来的梯度路由分配给值较大者。因此,在池化层的前向传播中,一般会记录最大值的下标,这样可以很高效地在反向传播时路由梯度。

2.3 归一化层

        目前以及提出了很多类型的归一化层用于卷积神经网络的结构中。不过,这些层已经不再受到青睐了,因为在实际应用中他们的帮助非常有限。

2.4 全连接层

        全连接层中的神经元与前一层的激活项进行全连接,这和常规的神经网络一样,这些操作可以使用矩阵乘法来实现。

2.5 将全连接层转换成卷积层

        全连接层和卷积层的区别在于,卷积层只和输入的一个局部区域相连,并且很多神经元是共享参数的。但是,无论是全连接层还是卷积层,实际都是进行点积运算,所以函数形式上是相似的。因此,可以在全连接层和卷积层之间相互转换:

  • 对于任一卷积层,都有一个全连接层和它实现一样的前向传播函数。而这个全连接层的参数矩阵会非常地大,并且有很多位置为0(对应卷积层的局部连接特性),同时有很多参数的值相等(对应权值共享)。
  • 同样的,任一全连接层可以转换成一个卷积层。比如,一个全连接层的大小为 4096,并且输入的维度为7*7*512 ,那么它可以等价于一个卷积层,卷积层中每个过滤器的大小为7*7*512  ,步长为 1 ,填充为  0,过滤器个数为4096 ,那么输出就是 1∗1∗4096,在深度这一位维度上等于全连接层的输出。

        这两种转换中,从全连接层向卷积层的转换在实际应用中是很有帮助的。假如有一个卷积神经网络接收 224*224*3 大小的图片作为输入,并且使用一系列的卷积层和池化层最终产生一个 7*7*512 的输出(实际上这就是AlexNet所进行的事情)。在AlexNet中,最后使用了两个 4096 大小的全连接层,并在最后一层用了一个 1000 的全连接层用于类别评分的输出。我们可以将这三个全连接层转换成卷积层:

  • 使用一个过滤器大小为7*7  的卷积层替换第一个全连接层,并使得输出为 1∗1∗4096
  • 使用一个过滤器大小为 1*1 的卷积层替换第二个全连接层,并使得输出保持为 1∗1∗4096
  • 使用一个过滤器大小为 1*1 的卷积层替换最后一个全连接层,并使得输出变为 1*1*1000

        注意,深度的改变可以通过控制卷积层中过滤器的个数来实现。通过这一转变,我们可以使得原始的卷积神经网络(带全连接的)变成一个可以在更大的图像上灵活“滑动”的网络,这种没有全连接层的卷积神经网络又称为全卷积神经网络FCN。

        原始的卷积神经网络受制于全连接层所以输入图像大小必须固定,因为全连接层的参数矩阵与前一层输出的大小相关,如果输入图像尺寸改变,那么前一层输出的尺寸也会变化,如果这是一个训练好的模型,那么参数矩阵大小就是固定无法改变的,这时候前向传播就会出错。而将全连接层替换成卷积层,就不会出现这种问题,因为卷积层的超参数与前一层无关。举例说明,如果输入的图像为224*224  ,经过若干卷积层和池化层后变成 7*7*512 ,也就是说空间尺度上被压缩了32倍,那么此时如果输入图片大小变为384*384  ,那么输出的特征图像同样也是压缩32倍,变成12*12*512 。这时候如果接着是全连接层,那么需要展平成向量,然后进行全连接,而由于特征图像大小发生了改变,原全连接层的参数矩阵不匹配了。而如果使用前面提到的三个卷积层(第一个卷积层过滤器大小为7*7 ),那么能够继续前向传播,最终得到 6*6*1000 的输出,(12-7)/ 1 + 1 = 6),可以发现与原输出 1*1*1000 不同,这里的输出为6*6*1000的一个图像,并且输入和输出具有相对应的空间结构。在这种情况下,我们可以将FCN的输出看作是一张热度图,用热度来指示待检测的目标的位置和覆盖的区域。在目标所处的区域内显示较高的热度,而在背景区域显示较低的热度,这也可以看成是对图像上的每一个像素点都进行了分类,这个点是否位于待检测的目标上。

        最后在某些场景下,全连接可以提升效率,对于传统的 CNN(即包含全连接层),一个确定的网络其输入图像的大小是固定的,比如224*224,那么对于更大的图像,一般的操作是裁剪出很多 224*224 的小图像分别送入 CNN 网络中,然后取平均,而使用卷积层替代后,就可以同时计算。

3. 卷积神经网络架构

        我们已经介绍了卷积层、池化层、全连接层,这里我们将RELU操作也当做一个层,用于对元素进行非线性变换。这一节,我们将介绍如何将这些层堆叠起来形成一个卷积神经网络架构。

3.1 层的组合

        最常见的卷积神经网络架构的形式是一些卷积-RELU层堆叠起来后跟上一个池化层,然后重复这样的样式直到图片被处理成一个很小的大小。在某些时候,比较常见的是将处理后的小图片经过全连接层的转换,最后一个全连接层一般用于输出,比如种类得分。换句话说,最常见的卷积神经网络架构如下:

   INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC

        其中 * 表示重复, POOL? 表示可选添加池化层,并且保证 N>=0,一般来说N<=3,M>=0, K>=0 ,且一般 K<3,以下是常见的卷积神经网络架构中的模板:

  • INPUT -> FC,这实现了一个线性分类器,其中 N = M = K = 0.
  • INPUT -> CONV -> RELU -> FC
  • INPUT -> [CONV -> RELU -> POOL]*2 -> FC -> RELU -> FC,这里的每个卷积层后都加了一个池化层
  • INPUT -> [CONV -> RELU -> CONV -> RELU -> POOL]*3 -> [FC -> RELU]*2 -> FC ,这里我们可以发现,每两个卷积层后才跟了一个池化层。这对于更大更深的网络是一个好的方式,因为在被池化层破坏之前堆叠更多的卷积层可以提取出更多复杂的特征。

堆叠小卷积好于一个大卷积:

        当你堆叠了3个感受野为 3*3 的卷积层后,通过计算可以发现,其等价于一个7*7  的卷积层的感受野,但我们更倾向于堆叠3个小的卷积层,其原因主要有两点。首先,每个卷积层后都会进行一次非线性变换,所以使用多个卷积层使得表达能力会更好。其次,通过简单的计算可以发现,使用3个 3*3 的卷积层,虽然和使用1个 7*7 的卷积层感受野相同,但是参数量更小。也就是说,使用小的卷积层在获得对输入数据更好的表达能力的同时还减少了参数量。在实际应用中,使用小卷积层的唯一的缺点在于可能需要更多的内存来存储中间的卷积层结果,以此来保证反向传播可以进行(如果需要的话)。

当前进展:

        值得注意的是,目前出现了很多对传统结构的改变,比如Google的Inception结构和微软亚洲研究院的ResNet,这些结构都更加复杂并且使用了不同的连接结构。

3.2 层内超参数的设置

        到目前为止,我们还遗漏了每层中超参数大小的设置,我们首先给出一般的规则,然后对其进行探讨:

输入层: 应该可以被2多次整除,即输入的图片大小最好是2的幂或能多次被2整除,比如常用的包括 32(CIFAR-10)、64、96(STL-10)、224(ImageNet)、384、512。

卷积层: 应该使用小的过滤器(比如3*3  或者5*5  ),使用步长 S=1,并且最关键的是使用0填充来避免对输入图像空间维度的改变。也就是说,当过滤器大小 F=3 时,填充 P=1 ;F=5,P=2。对于一般的 F ,有公式P = (F-1)/2 ,这样就不会改变输入的空间尺度。如果你必须使用大的过滤器,这一般出现在第一个卷积层中。

池化层:最常见的是最的池化,使用2*2的感受野,步长为 2 ,这样可以舍弃输入数据中的75%。另外一种稍微不常见一点的是使用 3*3的感受野,步长为 2。一般很少在池化层中使用大于3的感受野,因为这样会造成过多的信息丢失和破坏,会导致模型有较差的表现。

尺度缩小问题: 

        前面介绍卷积层不改变输入的空间尺度,只在池化层中改变尺度,这是一种很理想的状态。如果在卷积层中使用大于1的步长,或者不使用填充,这样就会导致输入和输出的尺度不同,这时就需要认真计算每个卷积层的输入和输出大小,使得每层之间可以很好地连接起来。

为什么在卷积层中使用1步长?

        在实际应用中,小的步长表现更好。此外,前面提到了,使用步长为1可以使得卷积层不改变输入在空间上的尺度,只改变深度,而只在池化层中改变空间尺度。

为什么使用填充? 

        除了前面提到的保持空间尺度不变外,使用填充实际上还能提升网络的表现。因为如果不使用填充,那么每次卷积后图像的空间尺度都会变小,那么每次图像边缘的信息都会被“洗掉”。

向内存妥协: 

        在某些情况下,网络在搭建时整体所需的内存会大幅增加。比如说,使用 3*3 的卷积层来处理224*224*3的图像,该层有 64 个过滤器,并且填充1像素,得到输出为 224*224*64,这样就会产生了 72 MB左右的内存(每张图片,包括输出和梯度的存储)。由于GPU经常有内存瓶颈,所以进行妥协是很有必要的。在实践中,人们通常只在第一个卷积层中进行妥协。比如,在第一个卷积层中使用 7*7 的过滤器,步长为2(ZFnet),或者使用11*11的过滤器,步长为4(AlexNet)。

3.3 计算上的要点

        在构建卷积神经网络时最大的瓶颈就是内存瓶颈,很多现代的GPU只有3/4/6GB的内存,最好的也就12GB(现在不止了),主要有3个使用内存的地方:

  • 来自中间变量的开销:每一层中的输出结果以及梯度,为浮点数。这些中间结果需要被记录是因为需要进行反向传播,不过如果在测试的时候(只进行前向传播),可以节约这部分的开销,每次只需要记录下当前层的值,并且舍弃掉前面的数值。
  • 来自参数的开销:各种网络的参数,比如反向传播时记录的梯度值,以及如果使用momentum, Adagrad 或者 RMSProp作为优化器时每一步产生的中间值。
  • 其他开销:比如图片批度参数等各种繁杂琐碎的内存开销。

        对这些进行计算得到以GB为单位的结果,其中每个单精度浮点数为4字节,双精度为8字节。如果发现自己的网络不能适应内存大小,一般通过减小批度来适应,因为大部分的内存开销都用于存储提取的特征。

CSE599W lecture4 自动微分 反向梯度传播是神经网络训练的基本原理,本节介绍了自动微分(Autodiff)的基本实现方法,并最后给出了一个小练习。网上有一些针对这一节的笔记,但大多讲的不太清晰。这里尝试给出一些自己的理解过程。 符号微分 直接根据公式计算出梯度的表达式。这种方法的缺点是:对于复杂的函数,导数式子可能会很庞大,并且我们其实是不需要保存中间结果的。 数值微分 数值微分很好理解,就是根据导数的定义去计算出一个近似的梯... 阅读详情

相关推荐

用AnythingLLM搭建私人RAG知识库:从入门到实战调优指南

大型语言模型虽然知识渊博,但无法触达私有文档中的具体内容,这正是检索增强生成(RAG)技术的核心价值所在。RAG通过先将文档切块并向量化,再在提问时检索最相关的片段拼接给模型,让AI基于指定资料精准回答,无需昂贵的模型微调。这种架构不仅让知识更新即时生效,还大幅降低了私有化部署的门槛。在实际工程中,RAG的落地需要合理选择嵌入模型、设计分块策略并调优检索参数,才能避免答非所问。对于个人或小团队,使用开源工具搭建本地知识库是最省心的路径,其中AnythingLLM以其开箱即用的特性,成为连接向量检索与模型推理

weixin_29062671的博客 230

反向传播思想及其优缺点

反向传播思想:计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,根据梯度方向更新权值。(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述...

Linn 1万+

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!希望通过我的讲解文章可以帮助你们少走一些弯路!今天,我要分享的是一个PID温控实验平台的搭建,这是一个系列文章,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!!

qq_35953617的博客 8049

深度学习知识点整理(二)——神经网络理解 / 反向传播 / 激活函数 / 神经网络优化

3. Neural Network Basics& Back Propagation 16.从线性分类到两层神经网络 linear f=Wx 2-layer NN f=W2max(0,W1x) 3-layer NN f=W3max(0,W2max(0,W1x)) 17.常见的激活函数 注:更多隐藏单元的数目代表着更大的容量 18. 神经网络的一般步骤? 模型初始化 前向传播 计算loss 计算梯度 反向传播 权重更新 迭代直到收敛 4. Improve DNN -1 为什么需要激活函数

zhr1030635594的博客 1822

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668

三款云电脑实测:ToDesk、青椒云、顺网云谁更适合AIGC新手?附详细配置对比

本文针对AIGC新手,深度实测了ToDesk云电脑、青椒云和顺网云三款云电脑服务。通过对比上手门槛、内置生态、操作引导及成本,发现ToDesk云电脑凭借一键启动、丰富预置模型和直观引导,为新手提供了最接近“开箱即用”的零门槛AIGC创作体验,是快速入门AI绘画的高效选择。

assembly8low的博客 1095

深度神经网络使用较大批量训练时容易导致超内存的主要原因

在模型训练初始化完成后,我们交替的使用正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。既然我们在反向传播中使用了正向传播中计算得到的中间变量来避免重复计算,那么这个复用也导致了正向传播结束后,不能立即的释放中间变量的内存。这也训练要比预测占用更多内存的重要原因 。 另外,需要指出的是,这些中间变量的个数大体上和网络层数相关,每个变量的大小与批量大小和输入个数也是线性相关的 ,他们是导致 ...

sinat_21720047的博客 2651

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

详解神经网络中反向传播和梯度下降

反向传播指的是计算神经网络参数梯度的方法。

华为云官方博客 1771

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3818

Plant Simulation 双深位立库开发系列教程-货架参数化

为了方便用户进行货架参数化,我们需要在交互界面上进行参数调整,右键打开RackLane,打开Dialog,在Rack_tab的tab下创建相应的对象,并创建NumberOfRightRack和NumberOfLeftRack作为数据连接对象。通过Rack._3D.VisibleGraphicGroups := ["default"]来切换需要显示的Rack,当不需要显示则可以Rack._3D.VisibleGraphicGroups := [""]即可。首先,加载默认的HBW库到模型中,确保结构树当中有。

santayana的专栏 1258

高效的反向传播实现:PyTorch与TensorFlow

1.背景介绍 深度学习是一种人工智能技术,它主要通过神经网络来学习从大量数据中抽取出特征,并进行预测。深度学习的核心算法就是反向传播(Backpropagation),它是一种优化算法,用于根据损失函数的梯度来调整神经网络中各个权重参数,从而使得模型的预测效果不断提高。 在深度学习的发展过程中,PyTorch和TensorFlow是两个最为受欢迎的深度学习框架之一。PyTorch是Facebo...

AI天才研究院 1347

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 508

Lecture4 神经网络与反向传播(1)

Lecture4 神经网络与反向传播(1)

pinkshell_1314的博客 654

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Lecture4 反向传播(Back Propagation)

《PyTorch深度学习实践》刘二大人教程笔记以及补充

Curz酥的博客 643

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Lecture3:神经网络与反向传播

介绍了神经网络与反向传播

qq_41694024的博客 726

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【深度学习】lecture4 反向传播

( w^{(t)} ) 和 ( w^{(t+1)} ) 是模型的参数状态。( \eta_t ) 控制更新的步长。( \nabla_{w^{(t)}} L ) 指示损失函数的下降方向。( L ) 量化了模型的误差。“前向存结果,反向链式传;本地 Jacobian,乘以上层梯;一步降学习,万卷梯度平。

2403_87771104的博客 1468

cs231n Lecture 4 反向传播笔记

内容列表: 英文原版链接 简介 简单表达式和理解梯度 复合表达式,链式法则,反向传播 直观理解反向传播 模块:Sigmoid例子 反向传播实践:分段计算 回传流中的模式 用户向量化操作的梯度 小结 注:中文翻译出自知乎专栏“智能单元”,在其基础上增加了个人批注 简介 目标:本节将帮助读者对反向传播(backpropagation)形成直观而专业的理解。反向传播是利用链式法则(chain rul...

搬砖之路的专栏 504

CS231n-Lecture4:神经网络和反向传播(Neural Networks and Backpropagation)

神经网络和反向传播神经网络反向传播链式法则模块化:Sigmoid示例 神经网络 如上图,是一个2层的神经网络,其中 h=max(0,x)h=max(0,x)h=max(0,x),函数 max(0,x)max(0,x)max(0,x) 称作激活函数(activation function),通过它引入了非线性。 几种常用的激活函数: 神经网络的结构: 反向传播 链式法则 举例说明: # set some inputs x = -2; y = 5; z = -4 # perform the forw

qq_42341984的博客 354

【深度学习】lecture4 多层神经网络

本文介绍了多层神经网络与反向传播机制。文章首先解释了单层感知机的局限性,提出通过添加隐藏层和非线性激活函数来增强模型表达能力。重点讲解了三种常用激活函数(Sigmoid、Tanh、ReLU)的特性及适用场景。通过手写数字识别案例,展示了前向传播的计算流程。在反向传播部分,作者以"梯度快递"的比喻生动阐释了链式法则的运作原理,并提供了PyTorch实现示例和常见门电路的梯度规则。最后给出了矩阵版链式法则的实用小贴士,为理解深度学习中的梯度计算提供了清晰指导。

2403_87771104的博客 947

Lecture4 反向传播算法

  先放两个链接   https://www.zhihu.com/question/27239198/answer/89853077   https://www.cnblogs.com/charlotte77/p/5629865.html 参数的展开   在使用高级优化方法训练神经网络模型时(fminunc),需要以向量形式传递参数,而我们在神经网络中的$\theta_{1},,...

dkie80120的博客 144

深度学习 Lecture 4 Adam算法、全连接层与卷积层的区别、图计算和反向传播

深度学习 Lecture 4 Adam算法、全连接层与卷积层的区别、图计算和反向传播

m0_47407301的博客 1045

CS231n-2017 Lecture4神经网络笔记

我们之前的线性分类器可以接受输入,进而给出评分,这是一种线性变换,再此基础上,我们对这种线性变换结果进行非线性变换,并输入到下一层线性分类器中,这个过程就像是人类大脑神经的运作一样,神经元接受信号,并输出神经递质给下一个神经元,表示是兴奋(正权重)/抑制(负权重)

Se_ren_di_pity的博客 852

cs231n Lecture 4

今天的主要内容是Backpropagation and Neural Networks (part 1).我们在第2节课定义了一个scores function,在上节课对其补充了SVM loss和Softmax loss这两种损失函数以及regularization.我们现在的主要目的,就是从Loss=data loss+regularization中解出最好的W使得Loss最小。

一次人间也匆忙的专栏 1136

CS231n笔记(4)反向传播

可终于来到反向传播了。。。之前更新得实在是太慢了。。。 简介 反向传播是利用链式法则递归计算表达式的梯度的方法。理解反向传播过程及其精妙之处对于理解、实现、设计和调试神经网络非常关键(疯狂暗示)。 问题陈述:核心问题是给定函数f(x)f(x)f(x),其中xxx是输入数据的向量,需要计算函数fff关于xxx的梯度,也就是∇f(x)∇f(x)\nabla f(x) 参考 CS231...

Geek_of_优快云的博客 572

CS231N-Lecture4 Backpropagation&Neural Network

一、概述上一集结束之后,学到了score function,可以用SVM或者Softmax计算loss,可以在loss中增加regularization来获取更加合理的W,并且最后可以用Analytic Gradient(微积分)的方式计算loss function相对于W的gradient来更新W。如下图。这一集讲了如何使用链式法则来反向传播gradients,来更新W和b,这个gradients

0pr 794
上一篇: Lecture4 神经网络与反向传播(1)
下一篇: Lecture6 训练神经网络(1)
pinkshell_1314
博客等级 码龄6年 16粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值