解题思路
这道题要求我们根据题目给定的 GRU 公式,手动完成单层 GRU 的前向传播,并输出最终隐藏状态 hT。
题目已经明确:
- 输入为按时间顺序排列的序列 X=x1,x2,…,xT
- 已知输入权重矩阵 Wx∈Rd×3h
- 已知隐藏态权重矩阵 Wh∈Rh×3h
题目内容
小美是一位算法工程师,她正在研究一个用于预测用户下单行为的序列模型。为了更好地理解模型内部的运作机制,她决定亲手实现模型核心组件-单层 GRU 的前向传播过程。请你帮助小美完成这个任务,注意,请仅使用 numpy/pandas/scikit−learn 进行实现。
已知输入序列{xt}t=1T (每步维度 d ),权重矩阵/偏置、以及初始隐藏向量 ho(维度 h),请输出最终隐藏状态 hT 。
GRU 公式
对每一时刻 t=1...T
rt=σ(xtWxr+ht−1Whr+br)
zt=σ(xtWxz+ht−1Whz+bz)
h~∗t=tanh(xtW∗xh+(rt⊙ht−1)Whh+bh)
ht=(1−zt)⊙ht−1+zt⊙h~t
Wx=[Wxr∣Wxz∣Wxh]∈Rd×3h
Wh=[Whr∣Whz∣Whh]∈Rh×3h
b=[br∣bz∣bh]∈R3h
偏置 b=[br∣bz∣bh]∈R3h
公式各符号含义:
-
xt∈Rd
-
ht−1,ht∈Rh :分别为上一步与当前步的隐藏状态(维度 h )。
-
rt=σ(⋅)∈(0,1)h (resetgate重置门):控制从旧状态 ht−1 中“带入多少历史”。rt 越小,对应维度的历史信息被“清空”得越多。
-
zt=σ(⋅)∈(0,1)h (update gate 更新门):在旧状态与候选状态之间做软切换。
-
h~t=tanh(⋅)∈(−1,1)h (candidate hidden 候选状态)
输入描述
单行 JSON,字段:
{
"Wx":[[...],...], //d×3h
"Wh":[[...],...], //h×3h
"b":[...], //长度3h
"h0":[...], //长度h
"X":[[...],...] //T×d (按时间顺序)
}
-
d,h,T 皆 ≤3
-
所有值为数值;不含缺失
-
"Wx”:二维数组,形状 [d,3h]。即 [Wxr∣Wxz∣Wxh]。
-
“Wh":二维数组,形状 [h.3h]。即 [Whr∣Whz∣Whh]
-
"b":一维数组,长度 3h。依次对应 [br,bz,bh]。
-
"h0":一维数组,长度 h。初始隐藏状态 h0。
-
"X":二维数组,形状 [Td] 。按时间顺序存放各步输入xt;即第 t 行就是 xt 。
输出描述
仅一行:
[hT_1,hT_2,...] //长度=h
每元素保留 6 位小数(使用 round(x,6) 即可),顺序与隐藏维度一致。
补充说明
为确保通过测试用例,仅允许使用 numpy/pandas/scikt−learn。
样例1
输入
{"Wx":[[0.5,0,0.5,0,1,0],[0,0.5,0,0.5,0,1]],"Wh":[[0,0,0,0,0,0],[0,0,0,0,0,0]],"b":[0,0,0,0,0,0],"h0":[0,0],"X":[[0,0]]}
输出
[0.0, 0.0]