矩阵
一个好的矩阵可以完美表达现实世界里面的关系,矩阵的表现形式也可以看成是一个二维数组。
无损表示
可以完美的将显示世界的东西表达出来,不会残缺就叫完美表达例如判断一个人的输赢0表示输,1表示赢即完美的表达了输还是赢这便是无损表示
神经网络模型
SGD
随机梯度下降
每组数据训练完后更新权重 ,最朴素的神经网络训练方法
每次训练一个数据点更新一次权重,在非线性中也可以看成是斜率,即每次找到最佳斜率,之后更新。但是这种方法不一定可以找到最正确的值,因为你可以想象一下,如果在一个平面上有很多个凹,我们要找到最低的那个点,但是如果我们最开始不是在那个最低的凹点则不管怎么更新斜率也找不到那个最低点,只能找到在那个凹中的最低点。
FGD
每组数据集训练完成后更新权重
拟合
测试值与结果值的拟合程度
欠拟合
与数据集的拟合程度较低,预测的准确率较低。
解决方案:增加一些特征
过拟合
由于一些不必要的特征加入而导致的在训练的数据集中准确率很高,但是在使用别的数据集时会导致误差偏高
解决方案:减少一些不必要的特征
《grokkingDeepLearning》第六章前部分代码解析如下:
import numpy as np
weights = np.array([0.5, 0.48, -0.7])
alpha = 0.1
#准备数据集
streetlights = np.array([[1, 0, 1],
[0, 1, 1],
[0, 0, 1],
[1, 1, 1],
[0, 1, 1],
[1, 0, 1]])
#对应的结果
walk_vs_stop = np.array([0, 1, 0, 1, 1, 0])
input = streetlights[0]
goal_prediction = walk_vs_stop[0]
#训练40次
for iteration in range(40):
error_for_all_lights = 0
#将每组数据集进行训练并更新权重
for row_index in range(len(walk_vs_stop)):
input = streetlights[row_index]
goal_prediction = walk_vs_stop[row_index]
prediction = input.dot(weights)
error = (goal_prediction - prediction) ** 2
error_for_all_lights += error
delta = prediction - goal_prediction
weights = weights - (alpha * (input * delta))
print("Prediction:" + str(prediction))
print("Error:" + str(error_for_all_lights) + "\n")
知识了解
在黑客帝国三部曲里面里面有关于矩阵的,感兴趣的可以看一下
由于本人能力有限,有些地方的能提供图片参考,感兴趣的可以和我一起讨论学习
此文为本人学习所创,如有错误请多多指教
联系QQ1135999353