机器学习入门课程笔记(二)——deeplearning.ai: Improving Deep Neural Networks

损失函数与优化器:从「梯度是怎么被造出来的」到「梯度是怎么被用掉的」 本文揭示损失函数与优化器本质一体:优化器仅依赖损失产生的梯度,而损失决定梯度的方向、尺度与噪声特性。错误的损失选择(如分类用MSE)会导致梯度失衡,使优化器失效;不同损失(如Huber、Focal)通过调控梯度分布影响优化过程。实测表明,归约方式、标签结构与损失配对直接决定梯度行为,进而影响收敛性与泛化。核心观点:选对损失,才是让优化器“看得懂”的前提。 阅读详情

欢迎前往我的个人博客网站:mathscode.top获取更多学习资源。
所有文本内容会在知乎: MathsCode同步
所有开放资源会在Github: MathsCode开放下载
有问题欢迎大家评论或者私信我!


前言

这是Coursera上的吴恩达老师的DeepLearning.ai课程笔记系列二(Improving Deep Neural Networks: Hyperparameter Tuning, Regularization and Optimization)。
学习视频可在b站上找到:DeepLearning.ai课程视频
作业和证书需要在官网上进行完成、获取。此处需要科学上网
笔记以及代码文件请到Github 仓库进行。


Improving Deep Neural Networks: Hyperparameter Tuning, Regularization and Optimization

Week 1 Practical Aspects of Deep Learning

1. Train Dev Test sets

  • 数据量小,如1000个,各占70%/0/30% or 60%/20%/20%
  • 数据量大,后两者不需要很多

Train Set 训练集:对于一个网络(已经确定好了超参数),用训练集进行训练,观察是否收敛,得到对应的平均 Cost or Error,若已经收敛,并且通过训练集的存在确定了网络中的参数。

Hold-out cross validation set 简单交叉验证集 or development (dev) set:对于已经通过训练集训练好的网络,可以通过dev set 进行计算得对应的dev set error从而在若干个已经收敛的网络中选择出那个最好的网络,或者说是对多个解决问题算法进行验证,检验哪种算法更有效,或者说哪些算法相对更有效,此时已经选择好最优的一个或者多个模型。

Test set 测试集:测试机的存在主要的目的是将已经选择好的网络对其的泛化能力进行测试,观察其是否存在过拟合的问题,对选拔出来的分类器的效果进行评判,所以其实有无测试集对最终的网络效果并不会产生影响,但是如果没有测试集,那个时候验证集所起到的作用就是

如果数据集中的数据的来源不一样,即代表着数据的质量、结构都会有差别,那么要确保验证集和测试集的来自于同一个来源。

2. 偏差(Bias) 方差(Variance)

  • 高偏差,欠拟合:

  • 高方差,过拟合:

  • 研究bias and variance的指标:

    • Train set error: 根据测试集错误率的高低判断是否是欠拟合
    • Dev set error:根据验证集错误率的高低判断是否是过拟合
  • 处理高方差、高偏差的常用方法

    • 高偏差High bias:

      首先明确高偏差的是对于训练集而言,高偏差带来的是欠拟合,说明该网络在训练集上没有很好的拟合或者是收敛。

      所以需要做的就是更换网络的结构,比如增加相应的隐藏层或者隐藏单元,同时也可以更换更适合这个问题的算法,或者说换一些其他的网络结构,但是这个可能有用也可能没用。

    • 高方差High Variance:

      明确高方差是对于验证集而言,高方差带来的是过拟合,过分考虑了某个特殊数据的存在,没有考虑全局性,代表这个网络没有很好的泛化性。

      所以需要做的就是,添加更多的数据(当然这是基于能够获取到更多的数据),将部分特殊数据进行掩盖掉(优化掉)。或者是添加正则化项,当然更换其他网络结构很有可能会做到一箭双雕,同时解决两个问题。

    • 通常采用更多的数据可以在不过多影响偏差的同时降低方差

3. 正则化(Regularization)( L 2 L_2 L2​ 正则化)

  • 旨在解决网络过度拟合的数据,产生了高方差High variance的问题。

  • $L_2 \ Regularization: $
    J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ) + λ 2 m ∥ w ∥ 2 2 (1.3.1) J(w,b) = \frac{1}{m}\sum_{i=1}^{m} L(\hat y ^{(i)},y) + \frac{\lambda}{2m}\Vert w\Vert_2^2 \tag{1.3.1} J(w,b)=m1​i=1∑m​L(y^​(i),y)+2mλ​∥w∥22​(1.3.1)
    其中 L 2 L_2 L2​范数
    ∥ w ∥ 2 2 = ∑ j = 1 n x w j 2 = w T w (1.3.2) \Vert w \Vert_2^2 = \sum_{j=1}^{n_x} w_j^2 = w^Tw \tag{1.3.2} ∥w∥22​=j=1∑nx​​wj2​=wTw(1.3.2)

  • L 1 R e g u l a r i z a t i o n L_1 Regularization L1​Regularization
    J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ) + λ 2 m ∥ w ∥ 1 = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ) + λ 2 m ∑ j = 1 n x ∣ w j ∣ (1.3.3) J(w,b) = \frac{1}{m}\sum_{i=1}^{m} L(\hat y ^{(i)},y) + \frac{\lambda}{2m}\Vert w\Vert_1 \\ = \frac{1}{m}\sum_{i=1}^{m} L(\hat y ^{(i)},y) + \frac{\lambda}{2m}\sum_{j = 1}^{n_x}\vert w_j\vert\tag{1.3.3} J(w,b)=m1​i=1∑m​L(y^​(i),y)+2mλ​∥w∥1​=m1​i=1∑m​L(y^​(i),y)+2mλ​j=1∑nx​​∣wj​∣(1.3.3)
    但是 L 1 L_1 L1​正则化会使模型变得稀疏,也就是说 w w w会有很多0

4.为什么正则化能够预防过拟合

  • L 2 L_2 L2​正则化的内容是在损失函数的基础上加上一个正则化项 ( 1.3.2 ) (1.3.2) (1.3.2),为什么正则化就能预防过拟合。

  • 过拟合的出现,即就是因为当原本的损失函数出现过拟合的状态,可以认为此时加上的正则化系数 λ \lambda λ很小,即当 λ \lambda λ趋于0的状况下,会造成过拟合的状态。

  • 那么再考虑当公式中的 λ \lambda λ很大时,此时的 w w w矩阵中的会有多个接近0的值,这样在网络结构上看,代表着有多个节点是无效节点,那么此时的网络就可以看成是一个层数很多即很深的但是每层的节点数很少的网络,这样就很显然就会造成欠拟合的状态,即高偏差的效果。

    为什么,当 w w w很小的时候,会导致欠拟合、高偏差的效果?

    当 w w w很小的时候,那么以 t a n h tanh tanh 为激活函数时, w w w很小即 z z z就会很小,那么自变量的取值区间所处于是 t a n h tanh tanh函数的近似线性空间。我们知道当激活函数的线性函数的时候,不管是多深的网络或者说每层有多少个节点,最终效果都还是线性的。所以必定会存在欠拟合的情况。

  • 所以必然会存在一种情况,即 λ \lambda λ取一个特殊的值或者区间,让网络效果处于“just right”的状态,也就是刚刚好的状态!

5. Dropout 正则化

  • 反向随机失活Inverted Dropout

    • l l l :层数

    • keep_prob:代表每个节点存活的概率,低于keep_prob则代表该节点需要保存,反之则失活。如果keep_prob为0.8代表节点失活的概率为0.2。也可以认为保留上层数据的概率。每一层都有一个keep_prob

    • d 3 d^3 d3:是一个由0、1组成的矩阵,用来代表该层的节点是否保存,过程是先生成一个随机矩阵,其中每一个数代表的是第三层的某一个节点的数值,然后与keep_prob作比较,如果低则代表该节点保存,反之失活。

      d3 = np.random.rand(a3.shape[0],a3.shape[1]) < keep_prob
      

      注:上文只针对网络的某一层(此处为第3层),第三层的输出结果是a3,那么a3的结构应该就是为第三层节点数*m总样本数。

    • 该层有节点存在失活,对a3结果也是有影响,所以需要对a3进行更新,过滤掉d3中为0对应在a3的元素

      a3 = np.multiply(a3,d3) # a3 *= d3
      
    • 因为在计算 Z [ 4 ] = W [ 4 ] a [ 3 ] + b [ 4 ] Z^{[4]} = W^{[4]}a^{[3]}+b^{[4]} Z[4]=W[4]a[3]+b[4]过程中,因为 a [ 3 ] a^{[3]} a[3]被失活了部分值,所以为了保证 Z [ 4 ] Z^{[4]} Z[4]的期望,需要除以keep_prob来理论上达到之前的效果

      a3 /= keep_prob
      

      可以理解为,当a3有部分值被失活,那么产生的影响只有原本的影响(可以认为就是a3)的keep_prob倍,所以需要对其进行恢复。所以用除法。

      这也是dropout正则化的精髓所在,让部分节点失活消失作用,但是增强其他节点的影响。——摘自B站评论

      上文中提到的期望就可以理解为是均值,因为丢了部分的数据(失活归零),那么对于a3而言,均值成为了之前的keep_prob倍,所以需要除以keep_prob来恢复使均值基本变化不大。 ——摘自B站评论

    • 为什么要用除法,上文已经给了形象的解释,但是从数学本质出发,需要保证期望也就是均值不发生变化,那么对其的证明就有:

      假设一个神经元的输出激活值为a,在不使用dropout的情况下,其输出期望值为a,如果使用了dropout,神经元就可能有保留和关闭两种状态,把它看作一个离散型随机变量,它就符合概率论中的0-1分布,其输出激活值的期望变为 p*a+(1-p)*0=pa,此时若要保持期望和不使用dropout时一致,就要除以 p。

  • 测试阶段不进行Dropout

    深度学习模型在训练时候要使用Dropout来解决可能会出现的overfitting的问题,注意这里的dropout是指inverted dropout,而不是传统的dropout,而inverted dropout的在测试的时候是不需要进行的。

    深度学习模型训练时候使用dropout实际上只是让部分神经元在当前训练批次以一定的概率不参与更新,这样使得每一轮迭代获得的模型都是不一样的。这个过程一定程度上保持了不同模型之间最优参数设置,使得训练出的每一个模型不至于太差。在预测时候,不使用dropout,但会在权重上都乘上保留概率。最终的输出可以被认为是Bagging的一种近似。

    传统dropout 和 inverted dropout的区别,目前主流的方法是inverted dropout:

    • 在训练阶段,对执行了dropout操作的层,其输出激活值要除以keep_prob,

    • 测试阶段则不执行任何操作,既不执行dropout,也不用对神经元的输出乘keep_prob。

    而对于比较久的网络模型,比如AlexNet,其中采取的就是传统的dropout,其实从数学本质上来看,两者的区别并不是很大。

    在训练阶段应用dropout时没有让神经元的输出激活值除以 p,因此其期望值为 pa,在测试阶段不用dropout,所有神经元都保留,因此其输出期望值为 a ,为了让测试阶段神经元的输出期望值和训练阶段保持一致(这样才能正确评估训练出的模型),就要给测试阶段的输出激活值乘上 p ,使其输出期望值保持为 pa。

    而选择Inverted-dropout:

    测试阶段的模型性能很重要,特别是对于上线的产品,模型已经训练好了,只要执行测试阶段的推断过程,那对于用户来说,当然是推断越快用户体验就越好了,而Inverted-dropout把保持期望一致的关键步骤转移到了训练阶段,节省了测试阶段的步骤,提升了速度。

    dropout方法里的 keep_prob 是一个可能需要调节的超参数,用Inverted-dropout的情况下,当你要改变 keep_prob 的时候,只需要修改训练阶段的代码,而测试阶段的推断代码没有用到 keep_prob ,就不需要修改了,降低了写错代码的概率。

  • 为什么Dropout明明让一些节点失去作用,却能解决overfitting的问题?

    因为在训练过程中采取了dropout,每一个节点(也可以是Feature)都有可能在某一次训练中被失活,失活带来的代价就是输入在这个节点会消失,输出也会消失,所以对于每一个节点(Feature)的权重分配必须进行扩散才行,也就是不能把鸡蛋都放在一个笼子里,不能依赖于任何一个节点(Feature)。那么通过扩散权重达到雨露均沾会产生收缩权重的平方范数的效果。

  • 为什么 括号里要说也有Feature?

    因为对于第一层的网络节点也可以设定对应的keep_prob,这代表着对于多个输入特征而言,这样会使某些特征失效。

  • 对于keep_prob的选择:

    对于那些你认为相对于其他层有更大出现过拟合情况的层,他们的keep_prob可以相对设置低一些,但是当引入keep_prob后再交叉验证过程,要搜索更多的hyper-parameter

  • 计算机视觉领域采取dropout很多的原因:

    • 对于图像而言,一个训练样本拥有的像素很多,但是硬件设备的算力、内存是一定的,所以需要的像素多了,处理的样本就少了,所以会引用进dropout来对每一张图片进行处理,以至于获得更多的样本。
    • 但在其他领域,如果不出现过拟合问题,那么就没有使用Dropout正则化的必要了。

6.其他正则化方法

Data augmentation 数据增广

可以对同一张图片(数据)轻微的处理再加入到数据集当中作为新的数据。

Early stopping 提前终止

神经网络没必要一定要训练到最后,可以提前终止。

7. 优化配置->加速训练:对输入特征进行归一化

对于某一个特征:
μ = 1 m ∑ i = 1 m x ( i ) \mu = \frac{1}{m}\sum_{i=1}^{m}x^{(i)} μ=m1​i=1∑m​x(i)

x = x − μ x = x-\mu x=x−μ

σ 2 = 1 m ∑ i = 1 m x ( i ) \sigma^2 = \frac{1}{m}\sum_{i=1}^{m}x^{(i)} σ2=m1​i=1∑m​x(i)

x = x / σ x = x/\sigma x=x/σ

8. 问题:梯度消失、梯度爆炸 data vanishing/exploding gradients

当权重大于1的时候,会出现指数型增长即梯度爆炸

当权重小于1的时候,会出现指数型降低即梯度消失

9. 梯度检验

通过使用双边误差的方法来逼近(计算)得到的导数 d θ a p p r o x d\theta_{approx} dθapprox​,和原本计算的导数 d θ d\theta dθ进行比较。

双边误差的计算导数的公式:
d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , . . . , θ i + ϵ , . . . ) − J ( θ 1 , θ 2 , . . . , θ i − ϵ , . . . ) 2 ϵ d\theta_{approx}[i] = \frac{J(\theta_1,\theta_2,...,\theta_i+\epsilon,...)-J(\theta_1,\theta_2,...,\theta_i-\epsilon,...)}{2\epsilon} dθapprox​[i]=2ϵJ(θ1​,θ2​,...,θi​+ϵ,...)−J(θ1​,θ2​,...,θi​−ϵ,...)​
利用欧几里得范数的定义(计算两个向量之间的欧氏距离)进行计算两者的差异:
∥ d θ a p p r o x − d θ ∥ 2 ∥ d θ a p p r o x ∥ 2 + ∥ d θ ∥ 2 \frac{\Vert d\theta_{approx} - d\theta \Vert_2}{\Vert d\theta_{approx} \Vert_2+\Vert d\theta \Vert_2} ∥dθapprox​∥2​+∥dθ∥2​∥dθapprox​−dθ∥2​​

10.Tips

  • 不要再训练的时候使用梯度检验,只有在调试的时候才需要。
  • 记住有正则化

Week2 Optimization Algorithms

  • 大数据情况下训练速度太慢

1. Mini-batch 梯度下降法

  • 思想就是把整个数据集划分为若干个mini-batch,每一个mini-batch用{}来进行表示

    所以总结一下:

    {}用来表示mini-batch,即可表示为 X { t } X^{\{t\}} X{t}为第 t t t个mini-batch

    []用来表示神经网络的层,表示为与神经网络某一层中的相关的属性数据,如 z [ l ] z^{[l]} z[l]

    ()表示特指某一个样例中的数据,如 x ( i ) x^{(i)} x(i)

  • 当对神经网络参数进行训练的时候,分mini-batch进行训练,每一个mini-batch训练的过程就跟之前的batch gradient descent流程一样,只不过数据规模变成了mini-batch的规模罢了。

  • 与之前的batch gradient descent相比较,对整个数据集进行一次梯度下降运算就包含了整个数据集的数据,**也就是说,遍历一次数据集只能梯度下降一次,**而要得到最终的结果,需要在梯度下降的外面再套一层迭代循环,才能得到最终的最优结果。显然这样对大数据集是不友好的。

  • 而对于mini-batch而言,对整个数据集进行一次遍历梯度运算,相当于做了mini-batch的个数次的梯度下降。每一次mini-batch gradient descent 也叫做一次epoch

  • 如果有个丢失数据集,mini-batch效果更好,运行速度更快。

2. Mini-batch的理解

  • 如何选择mini-batch的size

    • size 为m的话,就跟普通的Batch gradient descent 一样的,每次迭代需要处理大量样本,如果样本数量巨大,单词迭代时间太长。

    • size 为1的话,每一个样本都是一个mini-batch,叫做Stochastic Gradient Descent 随机梯度下降法,每次迭代都是一个训练样本,无法通过向量化计算来进行运算加速。

      一种变体是随机梯度下降(SGD),它相当于小批量梯度下降,每个小批量只有一个示例。您刚刚实现的更新规则不会更改。改变的是,一次只计算一个训练示例的梯度,而不是整个训练集的梯度。

    • 所以真正的size应该介于两者之间

  • (Batch) Gradient Descent:

X = data_input
Y = labels
m = X.shape[1]  # Number of training examples
parameters = initialize_parameters(layers_dims)
for i in range(0, num_iterations):
    # Forward propagation
    a, caches = forward_propagation(X, parameters)
    # Compute cost
    cost_total = compute_cost(a, Y)  # Cost for m training examples
    # Backward propagation
    grads = backward_propagation(a, caches, parameters)
    # Update parameters
    parameters = update_parameters(parameters, grads)
    # Compute average cost
    cost_avg = cost_total / m
        
  • Stochastic Gradient Descent:
X = data_input
Y = labels
m = X.shape[1]  # Number of training examples
parameters = initialize_parameters(layers_dims)
for i in range(0, num_iterations):
    cost_total = 0
    for j in range(0, m):
        # Forward propagation
        a, caches = forward_propagation(X[:,j], parameters)
        # Compute cost
        cost_total += compute_cost(a, Y[:,j])  # Cost for one training example
        # Backward propagation
        grads = backward_propagation(a, caches, parameters)
        # Update parameters
        parameters = update_parameters(parameters, grads)
    # Compute average cost
    cost_avg = cost_total / m

3. Exponentially weighted averages 指数加权平均

在统计学中,叫做exponentially weighted moving average指数加权滑动平均值。

核心思想:
V t = β V t − 1 + ( 1 − β ) θ t V_t = \beta V_{t-1} + (1-\beta)\theta_t Vt​=βVt−1​+(1−β)θt​
β \beta β代表的是当前值在最终值中的占比, 1 ( 1 − β ) \frac{1}{(1-\beta)} (1−β)1​ 代表当前值考虑了之前多少个数据。

4. Bias correction in exponentially weighted averages 偏差修正

在指数加权平均的初期,会导致数据偏小,因为缺少之前的数据,可以理解为在热身预测学习。

所用在公式 ( 13 ) (13) (13)的基础上用:
V t = V t ( 1 − β t ) V_t = \frac{V_t}{(1-\beta ^ t)} Vt​=(1−βt)Vt​​
来取代公式 ( 13 ) (13) (13)的计算结果,这就叫做偏差修正,当然这么做是基于关注初期数据的需要,如果不关注初期数据可以不采用偏差修正。

5. Gradient descent with momentum 动量梯度下降法

  • 目的:希望在训练的时候,收敛速度更快同时波动幅度更小

  • 思想:

    在某次迭代过程中:用当前的mini-batch来计算当前的dW、db
    v d w = β v d w + ( 1 − β ) d W v_{dw} = \beta v_{dw} + (1-\beta) dW vdw​=βvdw​+(1−β)dW

    v d b = β v d b + ( 1 − β ) d b v_{db} = \beta v_{db} + (1-\beta)db vdb​=βvdb​+(1−β)db

    W = W − α v d w , b = b − α v d b W = W-\alpha v_{dw},b = b-\alpha v_{db} W=W−αvdw​,b=b−αvdb​

    当然也可以有偏差修正,但一般情况采取动量梯度下降不会有偏差的困扰。

  • 因为小批量梯度下降在只看到一部分示例后进行参数更新,所以更新的方向有一些变化,因此小批量梯度下降所走的路径将“振荡”到收敛。使用动量可以减少这些振荡。
    动量考虑了过去的梯度来平滑更新。先前渐变的“方向”存储在变量中 在形式上,这将是之前步骤中梯度的指数加权平均值。你也可以想到当一个球滚下山时的“速度”,根据山的坡度(坡度的方向)来增加速度(和动量)。

6. RMSprop

  • 目的:和动量梯度下降法的目的一样,希望收敛速度更快,并且幅度更小

  • 思想:

    在某次迭代过程中:用当前的mini-batch来计算当前的dW、db
    S d w = β S d w + ( 1 − β ) d W 2 S_{dw} = \beta S_{dw} + (1-\beta) dW^{2} Sdw​=βSdw​+(1−β)dW2

    S d b = β S d b + ( 1 − β ) d b 2 S_{db} = \beta S_{db} + (1-\beta)db^2 Sdb​=βSdb​+(1−β)db2

    W = W − α d w S d w , b = b − α d b S d b W = W-\alpha \frac{dw}{\sqrt S_{dw}},b = b-\alpha \frac{db}{\sqrt S_{db}} W=W−αS ​dw​dw​,b=b−αS ​db​db​

    本质就是看哪个维度速度慢就让他除以一个小的数让他加快,速度快自然就除以的是一个大数,自然就慢了。

7. Adam 优化算法

  • 本质:其实将Momentum 和 RMSprop相结合起来。

  • 思想:

    在某次迭代过程中:用当前的mini-batch来计算当前的dW、db
    v d w = β 1 v d w + ( 1 − β 1 ) d W v_{dw} = \beta_1v_{dw} + (1-\beta_1)dW vdw​=β1​vdw​+(1−β1​)dW

    v d b = β 1 v d b + ( 1 − β 1 ) d b v_{db} = \beta_1 v_{db} + (1-\beta_1)db vdb​=β1​vdb​+(1−β1​)db

    S d w = β 2 S d w + ( 1 − β 2 ) d W 2 S_{dw} = \beta_2 S_{dw} + (1-\beta_2) dW^{2} Sdw​=β2​Sdw​+(1−β2​)dW2

    S d b = β 2 S d b + ( 1 − β 2 ) d b 2 S_{db} = \beta_2 S_{db} + (1-\beta_2)db^2 Sdb​=β2​Sdb​+(1−β2​)db2

    V d w c o r r e c t e d = V d w ( 1 − β 1 t ) V_{dw}^{corrected} = \frac{V_{dw}}{(1-\beta_1^t)} Vdwcorrected​=(1−β1t​)Vdw​​

    V d b c o r r e c t e d = V d b ( 1 − β 1 t ) V_{db}^{corrected} = \frac{V_{db}}{(1-\beta_1^t)} Vdbcorrected​=(1−β1t​)Vdb​​

    S d w c o r r e c t e d = S d w ( 1 − β 2 t ) S_{dw}^{corrected} = \frac{S_{dw}}{(1-\beta_2^t)} Sdwcorrected​=(1−β2t​)Sdw​​

    S d b c o r r e c t e d = S d b ( 1 − β 2 t ) S_{db}^{corrected} = \frac{S_{db}}{(1-\beta_2^t)} Sdbcorrected​=(1−β2t​)Sdb​​

    W = W − α V d w c o r r e c t e d S d w c o r r e c t e d + ϵ , b = b − α V d b c o r r e c t e d S d b c o r r e c t e d + ϵ W = W-\alpha \frac{V_{dw}^{corrected}}{\sqrt {S_{dw}^{corrected}} + \epsilon },b = b-\alpha \frac{V_{db}^{corrected}}{\sqrt {S_{db}^{corrected}} + \epsilon} W=W−αSdwcorrected​ ​+ϵVdwcorrected​​,b=b−αSdbcorrected​ ​+ϵVdbcorrected​​

Adam广泛地使用与各种网络结构,但是其中超参数众多,每一个参数都对应着自己的作用或者说一个moment,所以叫做Adaptive Moment estimation

  • α \alpha α需要自行调整

  • β 1 \beta_1 β1​一般设置为0.9

  • β 2 \beta_2 β2​ 推荐为0.999

  • ϵ \epsilon ϵ 一般设置为 1 0 − 8 10^{-8} 10−8

8. Learning rate decay 学习率衰减

  • 目的:神经网络训练是按照mini-batch gradient descent 来进行训练的,所以随着epoch的推移,最终会在最小值的附近的小块区域里摆动,所以无法真正快速的触及到最小值。所以学习率需要随着epoch的增加而衰减,即步子要越跨越小。

    模拟退火算法:

  • 思想:

    衰减公式1:
    α = 1 1 + d e c a y _ r a t e ∗ e p o c h _ n u m α 0 \alpha = \frac{1}{1+decay\_rate*epoch\_num}\alpha_0 α=1+decay_rate∗epoch_num1​α0​
    衰减公式2:指数衰减
    α = 0.9 5 e p o c h _ n u m α 0 \alpha = 0.95^{epoch\_num}\alpha_0 α=0.95epoch_numα0​
    衰减公式3:

    α = k e p o c h _ n u m α 0 \alpha = \frac{k}{\sqrt{epoch\_num}}\alpha_0 α=epoch_num ​k​α0​

9. Code Exercise

  • 如果要利用次函数对输入数据X、Y进行随机排序,且要求随机排序后的X Y中的值保持原来的对应关系,可以这样处理:
per = list(np.random.permutation(m))
shuffer_X = X[per]
shuffer_Y = Y[per]

Week3 Hyperparameter Tuning, Batch Normalization and programming Frameworks

1. Hyper parameter Tuning 超参数调节(Tips)

  • 超参数重要性排序:

    • 学习率 α \alpha α
    • 动量梯度下降法中的指数加权平均中的 β \beta β,隐层单元数,mini-batch size
    • 层数、学习率衰减公式
  • 尝试随机值,因为很难提前知道什么超参数是好的,尝试从粗略到精细,从大区域聚焦到小区域。

  • 随机取值并不是在有效值范围内随机均匀取值,而是选择适当的步进值去探究这些超参数,这里采取对数标尺搜索超参数方式会更合理,反而不用线性轴。因为一般在右边界考虑取值的时候,参数值的细微变化都会引起很大的影响。

  • 超参数搜索实践:

    • Babysitting one model(Panda Approach):适用于拥有庞大的数据组,但是没有足够的计算机资源,即使正在训练的同时,也可以对参数进修改,就像人类在照看模型一样,根据模型的训练效果进行对参数的调节。在应用领域比如cv 或者推荐系统,一般更多看应用效果,所以采取panda模式。
    • Train many models in parallel(caviar strategy 鱼子酱策略): 在拥有足够的计算资源的基础上,设置多个不同的参数组,得到不同的模型,然后可以得到不同的学习曲线,从中挑选一个最好的。

2. Normalizing activations in a network 对激活函数进行归一化

  • 效果:使参数搜索问题变得更容易,使神经网络对参数选择更稳定,对于深度网络更好训练,,而归一化具有这样的效果。

  • 核心思想:Batch Normalization (BN) ,Batch 归一化,本质上来讲,其适用的归一化过程不仅仅是输入层,也是对神经网络中的每一个隐藏层的计算结果都进行归一化,因为上一层的结果作为下一层的输入,对输入的归一化可以加速下一层参数的训练效果。

  • 过程:

    对于神经网络中的隐藏层的值进行归一化:
    μ = 1 n [ l ] ∑ i = 1 n [ l ] Z i \mu = \frac{1}{n^{[l]}} \sum_{i=1}^{n^{[l]}}Z_{i} μ=n[l]1​i=1∑n[l]​Zi​
    注意这里的 Z i Z_{i} Zi​表示表示的是 Z [ l ] Z^{[l]} Z[l]的第 i i i个分量
    σ 2 = 1 n [ l ] ∑ i n [ l ] ( Z i − μ ) 2 \sigma^2 = \frac{1}{n^{[l]}}\sum_{i}^{n^{[l]}} (Z_{i}-\mu)^2 σ2=n[l]1​i∑n[l]​(Zi​−μ)2

    Z _ n o r m i = Z i − μ σ 2 + ϵ Z\_norm_{i} = \frac{Z_{i}-\mu}{\sqrt{\sigma^2+\epsilon}} Z_normi​=σ2+ϵ ​Zi​−μ​

    这样得到的 Z _ n o r m Z\_norm Z_norm就是方差为1,均值为0的分布,但是有的时候隐层的数据拥有不同的分布会存在意义,并不希望其是方差为1均值为0的分布,所以计算 Z ~ \tilde{Z} Z~
    Z ~ i = γ Z _ n o r m i + β \tilde{Z}_i = \gamma Z\_norm_i + \beta Z~i​=γZ_normi​+β
    这里的 γ \gamma γ 和 β \beta β是模型训练过程中进行训练的参数,不是超参。

3. 深度理解Batch Normalization(BN)

在原本forward propagation网络的基础上,在计算 Z [ l ] Z^{[l]} Z[l]之后加上Batch Normalization得到 Z ~ [ l ] \tilde{Z}^{[l]} Z~[l] 以其为激活函数的输入得到 A [ l ] A^{[l]} A[l],所以可以得出网络中的参数由原来的 W [ l ] W^{[l]} W[l]和 b [ l ] b^{[l]} b[l]基础上多出了 γ [ l ] \gamma^{[l]} γ[l]和 β [ l ] \beta^{[l]} β[l]。注意这里的 β [ l ] \beta^{[l]} β[l] 与 动量梯度下降法中的超参数 β \beta β进行区分。

通常Batch Normalization 要和 mini-batch进行搭配使用,**当使用BN时,考虑到BN归一化过程中需要同时减去均值,所以很显然对于每一层网络中的常数项 b [ l ] b^{[l]} b[l]必然会被消除,所以 b [ l ] b^{[l]} b[l]的存在对于网络并没有什么影响。**所以可以暂时认为 b [ l ] b^{[l]} b[l]为0。

总结

for t in range(1,num_mini_batches+1):
 Compute forward prop in X{t}
 In each layer,use BN to replace Z[l] with Z_norm[l]
 use backward prop compute dW[l],dbeta[l],dgamma[l]
 update paras

4. 为什么归一化可以加速训练?——BN为什么能够奏效?

  • 对于各种范围的值,通过归一化可以得到类似范围的值,而这样是产生训练加速的关键。而BN的奏效原因就是利用了这一点,不仅仅对于输入值,同时也应用在隐藏单元值。

  • BN可以是权重比你的网络更加滞后或者更深。

  • shift input distribution 改变数据分布:covariate shift

    含义:当已经利用一个数据集训练好了一个X -> Y的映射函数,其不发生变化,当更换数据集的分布时,或许就需要对网络重新训练。

    这里的shift一般指对数据集的剪切、旋转、更换颜色等等。

  • 对于某一层而言,上一层的结果作为这一层的输入,但是随着初始样本的变化,这一层的输入也会发生变化,并且这种变化是随机的,不可预知的,而BN归一化的作用是确保将该层的输入数据一定限制在了方差为1,均值为0的条件框中,使得输入变换的不会太大,让数据变得更稳定,保持一定的规律、分布,以便神经元更容易学习,让后层的神经网络有更坚实的基础。不管样本如何变化,BN把每一层网络的输入值都限制在了方差为1,均值为0的条件中(或者说不一定非得是方差为1,均值为0,而是由网络特征进行可以确定调整的值由参数 β \beta β和 γ \gamma γ​,这样做到了对数据的随网络自定义调整特征效果。)

    BN减少了输入值改变而引发的一系列问题,使得每一层的输出值更加稳定,那么对于神经网络的之后层就会有更坚实的基础,即是输入分布改变了一些, 但是他会改变的更少,因为他做的是当前层的学习,减弱了当前层和后层参数作用之间的联系。让每一层都可以自主的学习,少少独立于其它层,有助于加速整个网络的学习。

  • BN也有一定的正则化效果,实现正则化就是需要在网络中加入一部分随机噪声,使其不过分依赖于任何一个单元,避免其进行过拟合。Dropout 正则化方法就是在网路中添加了对于任何一个隐藏单元都有几率乘1还是乘0这样一个噪声(乘性噪声),而对于BN而言,其对于每一层都进行了归一化,归一化过程中出现了乘性噪声(除以标准差)和加性噪声(减去均值),并且这个标准差和均值并不是整个大数据集的,只是针对这一个mini-batch而言的,所以算作噪声,所以本质上和dropout类似,有轻微的正则化效果。

5. BN如何应用在测试数据集?

对于测试集而言,可能有时候数量达不到一个mini-batch,同时可以考虑到训练集的泛化能力,所以将BN应用到测试集上时中的均值和方差借助训练集的均值和方差进行指数加权平均之后得到结果。

6.Softmax regression(是一类激活函数)

  • Notation

    • C C C : 需要检测物体的类别总数,网络的输出层的单元个数一般就等于 C C C
  • 原理:对于最后一层网络应用Softmax 激活函数
    Z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] Z^{[l]} = W^{[l]}a^{[l-1]}+b^{[l]} Z[l]=W[l]a[l−1]+b[l]

    t = e z [ l ] t = e^{z^{[l]}} t=ez[l]

    a [ l ] = e z [ l ] ∑ j = 1 C t j a^{[l]} = \frac{e^{z^{[l]}}}{\sum_{j=1}^{C} t_j} a[l]=∑j=1C​tj​ez[l]​

华为 S2600T 存储 3 种网络端口(H4/H5/串口)用途解析与故障恢复实战 本文深度解析华为S2600T存储设备的三种关键网络端口(H4/H5/串口)的功能用途与故障恢复方法。通过详细的配置指南和实战案例,帮助管理员掌握管理接口(H4)的日常运维、维护接口(H5)的高级应用以及串口的应急操作,提升存储设备的可靠性和维护效率。 阅读详情

相关推荐

Win10/Win11共享打印机0x00000709终极修复指南:从注册表到LPD协议的全面解决方案

本文提供了Win10/Win11共享打印机0x00000709错误的终极修复指南,涵盖从注册表修改到LPD协议的全面解决方案。通过详细分析错误根源、基础修复四步法、高阶LPD协议方案及企业级深度修复策略,帮助用户彻底解决打印机共享问题,提升局域网打印效率。

weixin_33724046的博客 312

deeplearning.ai-Improving Deep Neural Networks(week1)

Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization 目录 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization setting up your Mach...

爱喝可乐~ 367

LVGL9.2移植至正点原子阿波罗STM32F429开发板

LVGL(Light and Versatile Graphics Library)是一个开源的图形库,旨在为嵌入式系统提供高效、灵活的图形用户界面(GUI)解决方案。它具有小巧的内存占用和高性能的渲染能力,支持多种硬件平台,包括单片机、DSP 和 ARM 处理器等。LVGL 支持丰富的控件(如按钮、标签、图标、滚动条等),并提供强大的主题、样式和动画功能,使得开发者能够轻松设计出美观且响应迅速的界面。

m0_51149752的博客 3173

mac-setup 项目 Docker 常用命令速查指南:build、run、exec、logs 等核心命令的完整参数说明与实战用法

在 macOS 上搭建开发环境后,Docker 通常是运行数据库、缓存服务或隔离测试环境的首选工具。本文基于 mac-setup 开源仓库的 [docs/docker/useful-commands.md](https://link.gitcode.com/i/7d919ea1aee6035a49e363eff9e108ac) 整理而成,系统讲解 `docker build`、`docker ru

gitblog_00755的博客 967

告别‘打架’的检测头:手把手教你用PyTorch实现YOLOv11解耦头(附完整代码)

本文详细解析了YOLOv11解耦检测头的创新设计与PyTorch实现,通过解耦分类和回归任务,显著提升目标检测性能。文章包含完整的代码实现、架构设计解析及工程调优技巧,帮助开发者深入理解并应用这一先进技术。

weixin_29031057的博客 301

【FPGA】定点数运算中的位宽优化与截取策略

本文深入探讨了FPGA定点数运算中的核心挑战——数据位宽优化与截取策略。针对定点数在加法、乘法等运算中位宽膨胀的问题,文章详细分析了位宽变化规律,并对比了直接截断、四舍五入和收敛舍入三大截取策略的优缺点及硬件实现方法。通过实战指南与避坑经验,旨在帮助开发者在保证计算精度的同时,高效利用FPGA资源,实现性能与面积的平衡。

weixin_29181861的博客 117

DataScience-And-MachineLearning-Handbook-For-Coders:模型优化与调参技巧,提升AI算法性能的终极指南

在人工智能和机器学习领域,**模型优化与调参技巧**是决定算法性能的关键因素。无论是初学者还是经验丰富的开发者,掌握有效的**模型调参方法**都能显著提升AI系统的准确性和效率。本文将为您详细介绍从基础到进阶的**AI算法性能优化**策略,帮助您构建更强大的机器学习模型。 ## 🚀 为什么模型优化如此重要? **模型优化**不仅仅是技术细节,它直接影响着AI系统的实际应用效果。一个未经优化的

gitblog_00004的博客 654

客服转人工率直降60%!OpenClaw深度集成NLP引擎,打造企业级对话自动化智能客服系统

本文介绍了一套基于OpenClaw智能体框架和NLP大模型引擎的智能客服系统解决方案。该系统通过深度集成NLP引擎实现精准语义理解,采用分层架构设计支持多渠道接入和业务系统对接,显著提升了客服效率。核心亮点包括:92%的重复问题自动解决率,60%的转人工率下降,40%的人力成本降低,以及从30秒压缩至0.5秒的平均响应时长。文章详细阐述了技术选型、系统架构设计、核心模块实现等关键环节,展示了如何通过智能对话系统破解传统客服业务中的人力资源与服务质量矛盾。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 362

低温ECR-MOCVD生长(002)GaN:椭偏仪测厚与电学性能

本研究用ECR-MOCVD在Si(111)和蓝宝石衬底上低温生长GaN薄膜,蓝宝石1.0SCCM、2h样品呈完全(002)择优取向,椭偏仪测厚32.81nm,迁移率10.42cm²/(V·s)。文章梳理了生长温度、TMGa流量与生长时间对结晶取向、膜厚、粗糙度、光学带隙和电学性能的影响。

Flexfilm_的博客 366

开源Harness项目DeerFlow 2.0,让智能体几乎能完成任何复杂任务

从提示工程到上下文工程,再到如今的 Harness,这条演进路径的本质是从“教模型如何理解人类”迈向“为模型构建一个可执行、可信赖、可长期运转的数字世界”。 当越来越多像 DeerFlow 2.0 这样的 Super Agent Harness 走向普及,AI 将真正进化为能理解、会规划、可执行、敢交付、长期负责的成熟生产力形态。

技术引领业务创新 520

海康VisionMaster与西门子Smart 200进行S7通信

海康VisionMaster与西门子Smart 200进行S7通信

haier123888的博客 8182

从认识人工智能到理解机器学习:我的 AI 入门第一课

正式开始学习人工智能之前,我对 AI 的认识其实比较模糊:知道 ChatGPT、知道大模型,也知道现在很多岗位都在谈 AI,但如果有人问我“人工智能到底是什么”“机器是怎么学会识别一只猫的”,我未必能从头到尾讲清楚。上午的课程更偏向行业全景:人工智能的发展、研究方向、NLP、岗位分工、学习路线和 AI Coding 工具。下午的课程更偏向技术基础:机器学习的原理、有监督学习、深度学习、模型训练和评估方法。

chh563的博客 468

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Hugging Face:成为机器学习界的“Github”

以下文章来源于OneFlow,作者OneFlow社区五年前,AI领域的知名研究者Andrej Karpathy发文称,传统人工编程属于“软件1.0”,“软件2

2601_96798011的博客 137

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

机器学习基础|监督学习、标签、回归

网约车预估等待时长依赖监督学习中的回归任务。平台利用历史订单数据,以司机实际到达耗时为标签,通过上车点、时间、运力、路况等特征训练模型。模型不断优化预测值与真实耗时的误差,最终对新订单输出连续的预估等待时间,实现精准预测。

weixin_43971465的博客 260

机器学习——混淆矩阵(待更新)

二元: true表示真实==预测,positive表示预测值=1.

m0_61175448的博客 166

机器学习必修课:经典算法与Python实战

《机器学习必修课:经典算法与Python实战》是一门系统性与实战性兼顾的课程,旨在帮助学习者从零基础掌握机器学习核心算法与Python编程应用。

2601_96797912的博客 154

AI 是怎样从数据中学习的?训练、验证、测试与推理

泛化能力(Generalization)指模型面对训练过程中没有见过的新数据时,仍然能够做出合理预测的能力。这是判断模型是否具有实际应用价值的重要标准。例如:一个用户流失预测模型,在历史数据上表现很好,但面对新上线的用户群体时,预测准确率明显下降。这可能说明模型学到的规律无法适应新的用户群体。泛化能力不仅取决于模型本身,也与训练数据是否具有代表性有关。训练数据只包含老用户,没有新用户。训练数据主要来自某个地区,实际业务却覆盖不同地区。过去的用户行为与当前用户行为已经发生变化。

dshizixu的博客 323

Spark06_MLlib机器学习

本文是《PySpark 从入门到实战》系列收官篇,带你用 Spark MLlib 走通机器学习全流程:从三要素与 7 步标准流程讲起,剖析 KNN、朴素贝叶斯、决策树三大算法原理,再以 KNN 手写、垃圾短信分类、决策树分类、逻辑回归鸢尾花(准确率 96.67%)、K-Means 聚类(轮廓系数 0.7345)五个案例落地,最后详解 TF-IDF 文本特征与余弦相似度。全文代码可直接运行,适合有 RDD 与 Spark SQL 基础的开发者快速上手。

2301_80420058的博客 462

AI小白入门|无监督学习到底是什么?

很多新手看完无监督学习的定义只会死记硬背。本文避开复杂公式,从真实业务场景切入,对比监督学习,讲清楚无监督学习的核心价值、适用场景、底层逻辑和容易踩坑的认知误区,帮你理解它在机器学习链路里的定位。

weixin_43971465的博客 192

机器学习01,KNN使用与简单数学原理

个人笔记

qq_59247073的博客 273

SVM支持向量机通俗解析:找到机器学习的“最优分界线”

一、爆款钩子:同样是画分界线,为何SVM能成为机器学习的“王者选手”?做机器学习的人,几乎都绕不开一个问题:如何给混乱的数据“分家”?有人用逻辑回归,有人用KNN,但有一个算法

2601_96798737的博客 107

机器学习03,端到端02

个人笔记

qq_59247073的博客 271

GaN 动态导通电阻测试专题:电流崩塌从哪来,测量窗口怎么选

但器件装到实际电路上跑一段时间,或者用双脉冲台架模拟开关工况再测导通压降,数值往往明显高于手册静态值,而且关断应力越强(母线电压越高、应力保持越久),抬升越明显;:使用钳位电压探头,把示波器通道的工作区间限制在低电压区(常见做法是钳位在 1.5V 附近的导通压降区),应力高压段由钳位电路吸收,导通段以高分辨率采样。台架搭建相对简单,是器件表征最常用的方案。双脉冲台的难点不在发脉冲,而在采样:漏源电压要从几百伏的应力电平瞬间跌落到毫伏至伏级的导通压降,示波器单一量程难以兼顾"扛住高压"和"分辨毫伏"。

Namisooft的博客 245

基于有效Token规模化的大模型预训练数据配方与工程体系研究——基于唐杰《高级机器学习》课程演讲

在此背景下,本文系统梳理GLM系列模型数据迭代轨迹,纠正数据墙认知偏差,分析天然数据与合成数据的互补机制,并完整构建支撑高质量Token挖掘的全链路数据工程体系,为大模型数据规模化建设提供理论与工程参考。早期小模型训练场景下,数据总量远大于算力可消化量,核心策略为择优筛选少量高质量数据。基于唐杰公开演讲核心观点、GLM数据迭代、数据墙、合成数据、清洗解析工具链、分层架构图、自研工程壁垒),完整重构成一篇结构严谨、逻辑连贯、标准期刊论文风格全文,预留精准图片插入位置,可直接定稿、查重、发表、结课提交。

interpromotion的博客 282

茶叶病虫害目标检测数据集

目标检测 yolo 目标检测数据集 茶叶病虫害目标检测数据集

DL_data_set的博客 399

CAGR 21.8%:GaN功率器件封装材料市场从3.23亿美元迈向12.77亿美元

随着氮化镓(GaN)功率半导体在消费快充、AI服务器电源及车载电源领域的加速渗透,GaN功率器件封装材料作为实现芯片贴装、电气互连、热量传导和长期可靠性保障的核心功能性材料,正迎来爆发式增长期。根据LP Information(路亿市场策略)初步调研,2025年全球GaN功率器件封装材料市场规模约为3.23亿美元,2026年预计约3.91亿美元,2032年将达到12.77亿美元,2026—2032年复合增长率(CAGR)高达21.8%。

LPIHelen的博客 189
上一篇: Coursera 申请助学金流程和材料
下一篇: 2023CS保研经验分享(清深、上交、港科大、南大LAMDA、同济、东南Palm等)
MathsCode
博客等级 码龄10年 3000粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值