AI数学基础36-从代码角度深入理解梯度下降法1

要深入理解神经网络的技术细节,不能仅仅停留在会调用现成的神经网络函数库上,例如TensorFlow,Caffe... 在学习的过程中,最好能亲自实现神经网络的关键技术代码,这样才能深刻的理解技术实现细节,才能更好的应用现成的神经网络框架库。

神经网络通过梯度下降法(Gradient Descent)在测试集上,通过优化(最小化)代价函数(cost function),来训练参数w 和 b

Gradient Descent is a popular and effective method to find a local minima of a function.

为了方便演示梯度下降法的实现细节,我们把神经网络简化为只有一个神经元,一个输入变量x,一个预测值y,即

y = w*x + b

并将激活函数简化为 f(a) = a, 这样神经网络简化为线性输出 f(x) = w*x + b,w 为直线的斜率(slope),b为直线的截距(intercept)。

为了获得测试数据集,我们假设 w = 3, b = 1,x∈(-5, 5), 步长0.1,输出值y上加一个随机数的扰动,形成一个测试数据集。随后,我们将在这个测试数据集上,应用梯度下降法,看看训练出的参数,是否逼近w = 3, b = 1

代码如下所示,五条Python语句,建议大家自己实现一遍:


AI数学基础36-从代码角度深入理解梯度下降法1_第1张图片

生成后的数据,如下图所示


AI数学基础36-从代码角度深入理解梯度下降法1_第2张图片

w,b和noise的大小,可以自行设置,不一定要跟本文一样。

根据训练数据排列习惯,特征X按列排布

这个数据为后续训练参数w,b做准备,《AI数学基础37-从代码角度深入理解梯度下降法2》

你可能感兴趣的:(AI数学基础36-从代码角度深入理解梯度下降法1)