Related
In following contests:
核心思路
把所有实数放大 104 做成整数定点,四舍五入就是对整数做带符号的「远离 0」除法。网络只有 L 层仿射。前向:每层 z=Wa+b 立刻舍入,隐藏层用平方整流 a=max(z,0)2/4 再舍入,输出层 a=z。反向:输出层 δ=y^−y;隐藏层 δ=(W⊤δnext)⊙g′(z),其中 g′(z)=z/2(z>0)否则 0,且 g′ 必须打在该层已经舍入过的 z 上。一批 m 个样本的 dW,db 对样本求和、不平均,全部加完后再舍入。最后 W←W−ηdW、b←b−ηdb,再舍入。反向全程用更新前的 W。
实现方法
某精密装配线用多层前馈网络估计工位夹具的热变形评分。给定一批样本的特征、标签与当前权重,按下列规则完成一次前向传播与反向传播,输出更新后的各层权重与偏置。本题要求实现反向传播。
网络含 L 层仿射变换。记 n0=d,第 l 层权重 W(l) 为 nl×nl−1 矩阵,第 i 行第 j 列连接上一层第 j 个节点到本层第 i 个节点;b(l) 为长度 nl 的偏置。输入 a(0)=x。第 1,…,L−1 层为隐藏层,第 L 层输出一个标量 y^。
对 l=1,…,L,预激活 z(l)=W(l)a(l−1)+b(l)。 算出后每个元素立即四舍五入到 4 位小数。
隐藏层平方整流 ai(l)=(zi(l))2/4(当 zi(l)>0),否则 ai(l)=0。 输出层 a(L)=z(L),y^=a1(L)。算出 a(l) 后每个元素立即四舍五入到 4 位小数。
单样本损失 ℓ=21(y^−y)2。一批 m 个样本的梯度对样本求和,不平均。反向过程使用更新前的 W。
输出层 δ(L)=y^−y,随后四舍五入到 4 位小数。
隐藏层 l=L−1,…,1: δ(l)=(W(l+1))⊤δ(l+1)⊙g′(z(l)), g′(z)=z/2(当 z>0),否则 g′(z)=0。 g′ 必须作用在该层前向已舍入的 z(l) 上。算出 δ(l) 后每个元素立即四舍五入到 4 位小数。
dW(l)=∑k=1mδ(l)(a(l−1))⊤,db(l)=∑k=1mδ(l)。全部样本累加完毕后,对 dW、db 每个元素四舍五入到 4 位小数。
学习率 η 给定。W(l)←W(l)−ηdW(l),b(l)←b(l)−ηdb(l)。更新后每个元素四舍五入到 4 位小数。
四舍五入:保留 4 位小数,第 5 位 ≥5 则第 4 位绝对值加 1(远离 0)。
第一行两个整数 m、d。
接下来 m 行,每行 d+1 个实数:前 d 个为特征 x,最后一个为标签 y。
下一行一个整数 L。
下一行 L 个整数 n1,…,nL。
随后按 l=1,…,L 给出第 l 层参数:先 nl 行、每行 nl−1 个实数表示 W(l)(n0=d),再一行 nl 个实数表示 b(l)。
最后一行一个实数 η。
1≤m≤30
1≤d≤4
2≤L≤3
1≤nl≤4,且 nL=1
输入所有实数绝对值不超过 1,0.05≤η≤0.5,至多给出 4 位小数。
按 l=1,…,L 输出更新后的参数:先 nl 行、每行 nl−1 个实数(W(l)),再一行 nl 个实数(b(l))。每个实数保留恰好 4 位小数,同行以空格分隔。
输入
1 2
1.0 0.5 1.0
2
2 1
0.4 0.2
-0.3 0.8
0.1 -0.2
0.5 -0.4
0.2
0.1
输出
0.4113 0.2057
-0.3000 0.8000
0.1113 -0.2000
0.5068 -0.4000
0.2755
说明
z(1)=(0.6000,−0.1000)。平方整流得 a(1)=(0.0900,0.0000)。z(2)=y^=0.2450。
δ(2)=0.2450−1.0=−0.7550。g′(z(1))=(0.3000,0.0000),故 δ(1)=(−0.1133,0.0000)。
dW(2)=(−0.0680,0.0000),db(2)=−0.7550;dW(1) 第一行为 (−0.1133,−0.0567),第二行全 0,db(1)=(−0.1133,0.0000)。
以 η=0.1 更新后即得输出。
输入
2 2
1.0 0.0 0.8
0.0 1.0 0.2
3
2 2 1
0.8 0.4
0.5 -0.2
0.2 0.1
0.6 0.5
-0.4 0.8
0.1 -0.2
0.5 -0.4
0.2
0.1
输出
0.8013 0.4000
0.5007 -0.2000
0.2013 0.1007
0.6011 0.5004
-0.4000 0.8000
0.1043 -0.2000
0.5013 -0.4000
0.2586
说明
第一份样本:z(1)=(1.0000,0.6000),a(1)=(0.2500,0.0900);z(2)=(0.2950,−0.2280),a(2)=(0.0218,0.0000);y^=0.2109,δ(3)=−0.5891。第二层预激活有负分量,g′ 对应为 0,故 δ(2)=(−0.0434,0.0000),δ(1)=(−0.0130,−0.0065)。
第二份样本同样走完前向与反向后,两份梯度求和再舍入:db(3)=−0.5861。以 η=0.1 更新即得输出。
In following contests:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册