深度学习中解决过拟合(over fitting)、欠拟合(underfitting)的方案。

深度学习中解决过拟合(over fitting)、欠拟合(underfitting)的方案。

简介

在深度学习训练和测试数据过程经常会遇到过拟合和欠拟合的问题。

  • 过拟合(over fitting):就是模型在训练集上精度达到我们需求,而在测试集上效果偏差。
  • 欠拟合(under fitting): 就是模型在训练集上精度不理想,无法达到我们要求。
    举个例子
accuracy accuracy accuracy accuracy
train 90% 30% 40% 99%
test 60% 29% 20% 99.1%
情况 过拟合 欠拟合 过拟合+欠拟合 good

解决方法

  • 过拟合(over fitting)、欠拟合(under fitting)
    CV领域,目前网络都比较深,训练到一定精度不是很难,所以过拟合比较容易遇到。
    • 过拟合解决方法通常有:1)Loss添加正则化项(L2正则化),(2)Dropout、(3)数据增强

    • 1)L2正则化
      J = J ( y , y ^ ) + λ 2 m ∑ i = 1 L ∣ ∣ W i ∣ ∣ 2 ( 1 ) J = J(y,\widehat y) + \frac{\lambda}{2m}\sum_{i=1}^{L}||W_i||^2\qquad(1) J=J(y,y )+2mλi=1LWi2(1)

      公式(1)中, L L L代表网络中有 W W W的层的数目, ∣ ∣ W i ∣ ∣ 2 ||W_i||^2 Wi2是指 W i W_i Wi里面的每一个元素平方的和: ∣ ∣ W i ∣ ∣ 2 = ∑ k = 1 M ∑ j N W i ( k , j ) 2 ||W_i ||^2=\sum_{k=1}^{M}\sum_{j}^{N} W_{i(k,j)}^2 Wi2=k=1MjNWi(k,j)2, λ \lambda λ是超参数。

    • 2)Dropout
      Dropout是对网络进行裁剪,通常情况下是设置一个概率 k e e p _ p o b keep\_pob keep_pob,保留 k e e p _ p r o n keep\_pron keep_pron比例的神经元, ( 1 − k e e p _ p r o b ) (1-keep\_prob) (1keep_prob)比例节点置为0.
      深度学习中解决过拟合(over fitting)、欠拟合(underfitting)的方案。_第1张图片
      Droupout经典用法是: Inverted dropout
      算法流程:取第二层 l l l=2,只保留50%的神经元,最后除以 k e e p _ p r o b keep\_prob keep_prob是为了让期望保持不变。
      ————————————————————————————
      l = 2 k e e p _ p r o b = 0.5 a l l=2\qquad keep\_prob = 0.5 \qquad a_l l=2keep_prob=0.5al
      D l = n p . r a n d o m . r a n d ( a l . s h a p e [ 0 ] , a l . s h a p e [ 1 ] ) D_l=np.random.rand(a_l.shape[0],a_l.shape[1]) Dl=np.random.rand(al.shape[0],al.shape[1])
      D l = ( D l < k e e p _ p r o b ) D_l =(D_l<keep\_prob) Dl=(Dl<keep_prob)
      a l = n p . m u l t i p l y ( D l , a l ) a_l = np.multiply(D_l,a_l) al=np.multiply(Dl,al)
      a l / = k e e p _ p r o b a_l {/=} keep\_prob al/=keep_prob
      ————————————————————————————

    • 3)数据增强(也是欠拟合解决方案)
      可以对数据进行翻转、裁剪、加噪声、镜像、HSV通道加强等操作,解决过拟合问题

你可能感兴趣的:(计算机视觉,深度学习)