深度学习基础(十)—— 稀疏编码(二)

在实际编程时,为了写出准确无误的优化函数代码并能快速又恰到好处地收敛到最优值,可以采用下面的技巧:

  • (1)将输入样本集分成多个小的mini-batches,这样做的好处是每次迭代时输入系统的样本数变少了,运行的时间也会变短很多,并且也提高了整体收敛速度。
  • (2)S(Feature Matrix)的初始化值不能随机给。一般都是按照下面的方法进行:


    深度学习基础(十)—— 稀疏编码(二)_第1张图片

    featMatrix = weightMatrix'*miniBatch;
    normWM = sum(weightMatrix.^2)';
    featMatrix = featMatrix ./ repmat(normWM, [1, size(featMatrix, 2)]);

      最后,在实际优化该代价函数时步骤大致如下:

  • (1)随机初始化A

  • (2)重复以下步骤直至收敛

    随机选取一个有小的mini-batches。
    按照前面讲的方法来 S
    根据上一步给定的 A ,求解能够最小化 J(A,S) S
    根据上一步得到的 S ,求解能够最小化 J(A,S) A

拓扑结构时的代价函数

J(A,S)=1mASX22+λVS.2+ϵ+γA22

关于 A 的梯度:

J(A,S)A=2m(ASX)S+2λA

此时可得 A 的解析解形式:
A=XS(SS+λI)1

关于 S 的梯度为:

J(A,S)S=2mA(ASX)+λV(VS.2+ϵ)1/2.S

你可能感兴趣的:(深度学习基础(十)—— 稀疏编码(二))