Nếu bạn có rất nhiều các nút trong đó giá trị của x là bên ngoài -10 .. + 10 hộp, bạn chỉ có thể bỏ qua để tính toán những giá trị nào cả, ví dụ như vậy ..
if(x < -10)
y = 0;
else if(x > 10)
y = 1;
else
y = 1/(1 + Math.exp(-x));
return y;
Tất nhiên, điều này gây ra chi phí của các kiểm tra có điều kiện cho MỌI tính toán, vì vậy nó chỉ đáng giá nếu bạn có nhiều nút bão hòa.
Một điều đáng nhắc đến là, nếu bạn đang sử dụng backpropagation, và bạn phải đối phó với độ dốc của hàm, tốt hơn là tính toán nó theo từng phần thay vì 'như được viết'.
Tôi không thể nhớ lại độ dốc tại thời điểm này, nhưng đây là những gì tôi đang nói về việc sử dụng một sigmoid lưỡng cực làm ví dụ. Thay vì tính cách này
y = (1 - exp(-x))/(1 + exp(-x));
mà lượt truy cập exp() hai lần, bạn có thể cache lên các tính toán tốn kém trong các biến tạm thời, như vậy
temp = exp(-x);
y = (1 - temp)/(1 + temp);
Có rất nhiều nơi để đặt các loại điều này để sử dụng trong lưới BP.
Giá trị của x có lặp đi lặp lại hay có nhiều khả năng chúng sẽ luôn khác nhau mỗi khi phương thức được gọi? – DaveJohnston
Ngoài ra, kết quả cần phải chính xác đến mức nào? –
@Dave - phụ thuộc vào độ chính xác mong muốn, nhưng chúng đều là số dấu chấm động, vì vậy khá nhiều độc đáo – Simon