function LSTM_weights = en_LSTM_weights_initialize(featureDimension, numHiddenUnits)

sigma=0.01;
mu=0;

% ÊäÈëÈ¨ÖØ£º[4 * numHiddenUnits] X featureDimension
% ÊäÈëÃÅ£º1 - numHiddenUnitsÐÐ
% ÒÅÍüÃÅ£ºnumHiddenUnits + 1 - 2 * numHiddenUnitsÐÐ
% CELL£º  2 * numHiddenUnits + 1 - 3 * numHiddenUnitsÐÐ
% Êä³öÃÅ£º3 * numHiddenUnits + 1 - 4 * numHiddenUnitsÐÐ
LSTM_weights.Wi = randn(4 * numHiddenUnits, featureDimension) .* sigma + mu;
LSTM_weights.dL_dWi = zeros(4 * numHiddenUnits, featureDimension);
LSTM_weights.dL_dWi_old = zeros(4 * numHiddenUnits, featureDimension);
LSTM_weights.Wi_update = zeros(4 * numHiddenUnits, featureDimension);
LSTM_weights.Wi_update_old = zeros(4 * numHiddenUnits, featureDimension);

% Ñ­»·È¨ÖØ£º[4 * numHiddenUnits] X numHiddenUnits
% ÊäÈëÃÅ£º1 - numHiddenUnitsÐÐ
% ÒÅÍüÃÅ£ºnumHiddenUnits + 1 - 2 * numHiddenUnitsÐÐ
% CELL£º  2 * numHiddenUnits + 1 - 3 * numHiddenUnitsÐÐ
% Êä³öÃÅ£º3 * numHiddenUnits + 1 - 4 * numHiddenUnitsÐÐ
LSTM_weights.Wr = randn(4 * numHiddenUnits, numHiddenUnits) .* sigma + mu;
LSTM_weights.dL_dWr = zeros(4 * numHiddenUnits, numHiddenUnits);
LSTM_weights.dL_dWr_old = zeros(4 * numHiddenUnits, numHiddenUnits);
LSTM_weights.Wr_update = zeros(4 * numHiddenUnits, numHiddenUnits);
LSTM_weights.Wr_update_old = zeros(4 * numHiddenUnits, numHiddenUnits);

% Æ«ÖÃ£º[4 * numHiddenUnits] X 1
% ÊäÈëÃÅ£º1 - numHiddenUnitsÐÐ
% ÒÅÍüÃÅ£ºnumHiddenUnits + 1 - 2 * numHiddenUnitsÐÐ
% CELL£º  2 * numHiddenUnits + 1 - 3 * numHiddenUnitsÐÐ
% Êä³öÃÅ£º3 * numHiddenUnits + 1 - 4 * numHiddenUnitsÐÐ
% ÒÅÍüÃÅÆ«ÖÃ³õÊ¼»¯Îª1£¬ÆäËüÆ«ÖÃ³õÊ¼»¯Îª0
LSTM_weights.Bi = zeros(4 * numHiddenUnits, 1);
LSTM_weights.Bi(numHiddenUnits + 1 : 2 * numHiddenUnits,:) = 1;
LSTM_weights.dL_dBi = zeros(4 * numHiddenUnits, 1);
LSTM_weights.dL_dBi_old = zeros(4 * numHiddenUnits, 1);
LSTM_weights.Bi_update = zeros(4 * numHiddenUnits, 1);
LSTM_weights.Bi_update_old = zeros(4 * numHiddenUnits, 1);
