在这个世界里,你知道得越多,就发现有更多的不知道,就在知道与不知道之间来回寻找,这个世界就是这样神奇。当你正在看NG的公开课时,就像这样在知与不知中寻找,或者在其中迷茫,或紧张,或张望,希望有人拉你一把。当看到下面这个公式时:
这个就是一个变量的线性回归最优化函数,NG当时没有解释为什么这样定义的,只是让这个J函数最小化,就可以达到最优化的线性方程回归了。同时,你如果看过我前面的文章,也会发现TensorFlow的例子里是这样来定义损失函数的:
loss = tf.reduce_mean(tf.square(y - y_data))
可以看到这里,tf.square(y - y_data)就是计算y - y_data的平方, tf.reduce_mean是计算所有平方的平均值,但没有除以2,因为除与不除都是一样的收敛性,所以省略了这个不必要的除法,还可以加快计算速度。
但是我很好奇这个一元变量的损失函数是怎么得来的呢?在原来的视频里没有解释,也许是我还没有看到。后来仔细翻看讲义,后面有推导整个过程,详细如下:
整个过程是通过《概率论》来推导的,然后通过似然函数(这里又引出了不知的概念?)变换,再对公式两边取对数,因为要l函数最大化,就是要后面负数项最小化,也就是推导出来最前面的公式了。
有了这个公式和理论支持,当遇到线性回归的问题时,就可以使用这个公式来构造损失函数,最后判断损失函数最小化,就达到判断训练是否达标了。因此,就可以把这个损失函数放入代码中:
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
给定了判断标准,就可以给大量的数据来训练这个神经元,让你的机器学会预测房价,或者预测股市的波动。
不过,这里只是一元的线性回归,比较单一的,如果想模拟复杂的情况,比如达到100个变量的模型,那么就得寻找更多不知道的东西了,这个世界就是这么神奇,当你知道了,又发现很多的不知道。