Attention model-注意力模型

3 篇文章 0 订阅
2 篇文章 0 订阅
注意力模型解决了长句子翻译中的挑战,模拟人类逐步理解并翻译的过程。它通过分配不同的注意力权重给源句子的不同部分,形成上下文向量。每个上下文由前一时间步的输出与加权的Encoder值之和构成,权重通过softmax函数确保总和为1。打分函数用于确定注意力权重,可由神经网络计算得出。
摘要由CSDN通过智能技术生成

Attention model

简单理解下注意力模型

在这里插入图片描述

看上图,如果去掉注意力机制,直接将下面部分最后一个时间步的输出作为第一个上下文context,就是一般的RNN模型。这种模型的一个问题是,例如在做翻译的时候,一个很长的句子,人类很难一下子读完然后翻译,应该是读几个词翻译一下,即翻译出来的句子的前几个词与原句的前几个词关系更相关,注意力更关注前几个词,注意力机制做的也就是这个工作。

每个上下文context,引入注意力机制后,它的值应该上个时间步的输出加上以注意力作为权重的Encoder的值之和。

α < t , t , > \large \alpha^{<t,t^,>} α<t,t,>表示输出 y t y^t yt应该放多少注意力到 a t , a^{t^,} at,
c 1 = α < 1 , 1 > ∗ a < 1 > + α < 1 , 2 > ∗ a < 2 > + . . . c 2 = s 1 + α < 2 , 1 > ∗ a < 1 > + α < 2 , 2 > ∗ a < 2 > + . . . \large c^1=\alpha^{<1,1>}*a^{<1>}+\alpha^{<1,2>}*a^{<2>}+...\\ c^2=s^1+\alpha^{<2,1>}*a^{<1>}+\alpha^{<2,2>}*a^{<2>}+... c1=α<1,1>a<1>+α<1,2>a<2>+...c2=s1+α<2,1>a<1>+α<2,2>a<2>+...

如何计算注意力?看下面公式:
α < t , t , > = s o f t m a x ( e < t , t , > ) \large \alpha^{<t,t^,>}=softmax(e^{<t,t^,>}) α<t,t,>=softmax(e<t,t,>)
e < t , t , > e^{<t,t^,>} e<t,t,> 可以叫做打分函数,所有打分经softmax确保注意力之和为1。
e < t , t , > e^{<t,t^,>} e<t,t,>的求法可以是建立一个小的神经网络,输入时 S t − 1 和 a t , S^{t-1}和a^{t,} St1at,,输出就是 e < t , t , > e^{<t,t^,>} e<t,t,>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用网格搜索优化CNN-LSTM-注意力机制模型参数的Python代码示例: ```python from sklearn.model_selection import GridSearchCV from keras.wrappers.scikit_learn import KerasClassifier from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, LSTM, Dense, Flatten, Attention # 定义CNN-LSTM-注意力机制模型 def create_model(filters, kernel_size, pool_size, lstm_units, attention_units, learning_rate): model = Sequential() model.add(Conv2D(filters=filters, kernel_size=kernel_size, activation='relu', input_shape=(width, height, channels))) model.add(MaxPooling2D(pool_size=pool_size)) model.add(Flatten()) model.add(LSTM(units=lstm_units, return_sequences=True)) model.add(Attention(units=attention_units)) model.add(Dense(units=1, activation='sigmoid')) model.compile(optimizer=Adam(learning_rate=learning_rate), loss='binary_crossentropy', metrics=['accuracy']) return model # 创建Keras分类器 model = KerasClassifier(build_fn=create_model) # 定义参数网格 param_grid = { 'filters': [32, 64], 'kernel_size': [(3, 3), (5, 5)], 'pool_size': [(2, 2), (3, 3)], 'lstm_units': [64, 128], 'attention_units': [32, 64], 'learning_rate': [0.001, 0.01] } # 创建网格搜索对象 grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3) # 执行网格搜索 grid_search_result = grid_search.fit(X_train, y_train) # 输出最佳参数组合和评分 print("Best Parameters: ", grid_search_result.best_params_) print("Best Score: ", grid_search_result.best_score_) # 使用最佳参数组合训练模型并进行最终评估 best_model = grid_search_result.best_estimator_ best_model.fit(X_train, y_train) test_loss, test_accuracy = best_model.evaluate(X_test, y_test) print("Test Loss: ", test_loss) print("Test Accuracy: ", test_accuracy) ``` 在这个示例中,我们在CNN-LSTM模型的基础上添加了注意力机制。注意力机制可以帮助模型更好地关注输入的关键特征。 我们首先定义了一个函数`create_model`来创建包含注意力机制的CNN-LSTM模型,并使用`KerasClassifier`将其包装为可用于网格搜索的Keras分类器。 然后,我们定义了参数网格`param_grid`,其中包含了我们想要优化的参数范围,包括注意力机制的单元数量。 接下来,我们创建了一个`GridSearchCV`对象,并传入模型、参数网格和交叉验证的折数。 最后,我们调用`fit`方法来执行网格搜索。执行完毕后,我们可以通过`best_params_`属性获取最佳参数组合,并通过`best_score_`属性获取最佳模型的评分。 最后,我们使用最佳参数组合训练最佳模型,并在测试集上进行最终评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值