环境
- python 3.9
- numpy 1.24.1
- pytorch 2.0.0+cu117
一、Dropout
dropout在全连接层使用。
假设丢弃概率是P,有两种实现方式,不管是在《测试阶段》还是《训练阶段》对每层的输出做缩放,都是为了保持伯努利分布的期望np。《测试阶段》没dropout 而是全量神经元参与运算,不然预测结果具有随机性。为了保持每层输出和训练时一样的期望,所以需要缩放。
形象化理解:
10个人拉一个10吨的车:10*1=10
第一次(训练时):当只有8个人出力(有p=0.2的人被dropout),为保持10吨的车照常运行。
从:10*1* [(1-p)/(1-p)] = 10 即:10*(1-p) * [1/(1-p)] =10
可得每人需要 8人需要多发力1.25。
第二次(预测时):10个人需要同时出力(没dropout),为保持结果不变需乘 (1-p)
即:这次每个人出力 1.25 * (1-0.2) = 1
dropout为什么可以缓解