100行Python代码,轻松搞定神经网络
焦点设法着实始终未变。从我们在学校进修怎样求导时, 就应该知道这一点了。假如我们可以或许追踪最终求出标量输出的计较, 而且我们知道怎样对简朴操纵求导 (譬喻加法、乘法、幂、指数、对数等等), 我们就可以算出输出的梯度。 假设我们有一个线性的中间层f,由矩阵乘法暗示(暂且不思量偏置): 为了用梯度降落法调解w值,我们必要计较梯度∂l/∂w。这里我们可以调查到,改变y从而影响l是一个要害。 每一层都必需满意下面这个前提: 假如给出了丧失函数相对付这一层输出的梯度, 就可以获得丧失函数相对付这一层输入(即上一层的输出)的梯度。 此刻应用两次链式法例获得丧失函数相对付w的梯度: 相对付x的是: 因此, 我们既可往后向转达一个梯度, 使上一层获得更新并更新层间权重, 以优化丧失, 这就行啦! 下手实践 先来看看代码, 可能直接试试Colab Notebook: https://colab.research.google.com/github/eisenjulian/slides/blob/master/NN_from_scratch/notebook.ipynb 我们从封装了一个张量及其梯度的类(class)开始。 此刻我们可以建设一个layer类,要害的设法是,在前向撒播时,我们返回这一层的输出和可以接管输出梯度和输入梯度的函数,并在进程中更新权重梯度。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |