Tôi đã trải qua khóa học về máy học Standford / Coursera ; và nó đã diễn ra khá tốt. Tôi thực sự quan tâm đến sự hiểu biết về chủ đề hơn là đạt điểm từ khóa học và vì thế tôi đang cố gắng viết tất cả các mã bằng ngôn ngữ lập trình mà tôi thông thạo hơn (điều mà tôi có thể dễ dàng tìm hiểu rễ của).
Cách tôi học tốt nhất là làm việc thông qua các vấn đề, vì vậy tôi đã triển khai một mạng lưới thần kinh và nó không hoạt động. Tôi dường như nhận được cùng một xác suất của mỗi lớp không phân biệt ví dụ kiểm tra (ví dụ 0,45 của lớp 0, 0,55 của lớp 1, không phân biệt các giá trị đầu vào). Kỳ lạ thay, đây không phải là trường hợp nếu tôi loại bỏ tất cả các lớp ẩn.
Đây là một bản tóm tắt về những gì tôi làm;
Set all Theta's (weights) to a small random number
for each training example
set activation 0 on layer 0 as 1 (bias)
set layer 1 activations = inputs
forward propagate;
Z(j+1) = Theta(j) x activation(j) [matrix operations]
activation(j+1) = Sigmoid function (Z(j+1)) [element wise sigmoid]
Set Hx = final layer activations
Set bias of each layer (activation 0,0) = 1
[back propagate]
calculate delta;
delta(last layer) = activation(last layer) - Y [Y is the expected answer from training set]
delta(j) = transpose(Theta(j)) x delta(j+1) .* (activation(j) .*(Ones - activation(j))
[where ones is a matrix of 1's in every cell; and .* is the element wise multiplication]
[Don't calculate delta(0) since there ins't one for input layer]
DeltaCap(j) = DeltaCap(j) + delta(j+1) x transpose(activation(j))
Next [End for]
Calculate D;
D(j) = 1/#Training * DeltaCap(j) (for j = 0)
D(j) = 1/#Training * DeltaCap(j) + Lambda/#Training * Theta(j) (for j = 0)
[calculate cost function]
J(theta) = -1/#training * Y*Log(Hx) + (1-Y)*log(1-Hx) + lambda/ (2 * #training) * theta^2
Recalculate Theta
Theta = Theta - alpha * D
Đó có lẽ không phải là một thỏa thuận tuyệt vời để tiếp tục. Nếu ai đó có thể cho tôi biết nếu có bất kỳ lỗ hổng lớn nào trong mã của tôi thì thật tuyệt vời, nếu không thì một số ý tưởng chung về việc tôi có thể sai ở đâu / làm thế nào để gỡ lỗi một thứ như thế cũng sẽ rất tuyệt.
BIÊN TẬP:
Dưới đây là hình ảnh nhanh về mạng (bao gồm cả trường hợp kiểm tra đầu vào và phản hồi) (đây là sau 1 triệu lần lặp lại độ dốc);
Tập dữ liệu tôi đã sử dụng là hai điểm thi là x và thành công / thất bại khi vào trường đại học là y. Rõ ràng hai điểm kiểm tra là 0 có nghĩa là thất bại khi vào đại học, tuy nhiên, mạng cho thấy 56% cơ hội lấy điểm 0 là đầu vào.
Chỉnh sửa # 2;
Tôi đã chạy một thuật toán kiểm tra độ dốc với các loại kết quả sau;
Tính toán số: -0.0074962585205895493 Giá trị từ nhân giống: 0.62021047431540277
Tính toán số: 0,0032635327218463476 Giá trị từ lan truyền: -0.39564819922432665
vv Rõ ràng có điều gì đó sai ở đây; Tôi sẽ làm việc thông qua nó.