我有1个输入图层,2个隐藏图层和1个输出图层,对于单个训练示例x,输出y我计算了以下内容:
x = [1;0;1];
y = [1;1;1];
theta1 =
4.7300 3.2800 1.4600
0 0 0
4.7300 3.2800 1.4600
theta2 =
8.8920 8.8920 8.8920
6.1670 6.1670 6.1670
2.7450 2.7450 2.7450
theta3 =
9.4460 6.5500 2.9160
9.3510 6.4850 2.8860
8.8360 6.1270 2.7270
theta1控制输入层和layer1之间的映射 theta2控制layer1和layer2之间的映射 theta3控制第2层和输出层之间的映射
但要使用以下方法计算梯度下降:
theta(i) = theta(i) - (alpha/m .* (x .* theta(i)-y)' * x)'
其中i = 1或2或3,x和y的维度不正确。如果x和y是1x9而不是1x3,那么尺寸是正确的(通过正确我的意思是可以执行theta计算而没有错误)。我是否需要更改神经网络的架构,或者我可以将x和y设置为
x = [1; 0; 1; 0; 0; 0; 0; 0; 0];
y = [1; 1; 1; 0; 0; 0; 0; 0; 0];矩阵乘法算出来了?
更新:
alpha=learning rate (.00001)
m=number of training examples (1)
theta(i) refers to theta1,theta2,theta3
我使用矢量化梯度下降,如Vectorization of a gradient descent code
所述Update2:
这个matlab代码似乎有效:
m = 1;
alpha = .0000001;
x = [1;0;1];
y = [1; 1; 1];
theta1 = [4.7300 3.2800 1.4600; 0 0 0; 4.7300 3.2800 1.4600];
theta1 = theta1 - (alpha/m) * (x' * (theta1 * x - y));
是theta1 = theta1 - (alpha/m) * (x' * (theta1 * x - y));
矢量化梯度下降的正确实现吗?
我理解这会导致将θ矩阵展开到θ向量的问题,因为维度不会相同但是使用theta矩阵代替theta向量这是正确的吗?
更新:
公式从Vectorization of a gradient descent code修改
其中梯度下降的位置为:theta = theta - (alpha/m) * (X' * (X*theta-y));
我将其更改为theta = theta - (alpha/m) * (x' * (theta * x - y));
,因此(X*theta-y);
更改为(theta * x - y);
答案 0 :(得分:0)
在您引用的post中,X
是一个包含m行(训练样本数)的矩阵。在您的情况下,m = 1,因此X成为行向量。在初始化时,x是列向量。因此,最简单的更改是设置x = x'
和y = y'
,以便输入和输出都成为行向量。
公式仍然是
theta3 = theta3 - (alpha/m) * (x' * (x*theta3-y)) =
9.4458 6.5499 2.9160
9.3510 6.4850 2.8860
8.8358 6.1269 2.7270
theta2和theta1的更新规则类似。
此外,错误字词x*theta3-y
的形状与输入x
的形状相同;原始更新金额x' * (x*theta3-y)
的形状始终与theta3
相同。