আমার নিউরাল নেটওয়ার্কের ফলোআপ হিসাবে ইউক্লিডিয়ান দূরত্বটি শিখতেও পারছে না আমি আরও বেশি সরল করেছি এবং একক রিলুতে (এলোমেলো ওজন সহ) একক আরএলইউতে প্রশিক্ষণের চেষ্টা করেছি। এটি সেখানে রয়েছে সহজতম নেটওয়ার্ক এবং তবুও এটি রূপান্তর করতে ব্যর্থ অর্ধেক সময়।
প্রাথমিক অনুমান যদি লক্ষ্য হিসাবে একই রকমের দিকে থাকে তবে তা দ্রুত শিখে এবং 1 এর সঠিক ওজনে রূপান্তরিত করে:
প্রাথমিক অনুমানটি যদি "পিছনের দিকে" হয় তবে এটি শূন্যের ওজনে আটকে যায় এবং এটি কখনই নিম্ন ক্ষতির অঞ্চলে যায় না:
আমি বুঝতে পারছি না কেন। গ্রেডিয়েন্ট বংশোদ্ভূতগুলি কী সহজেই বিশ্বব্যাপী মিনিমাতে লোকসানের বক্ররেখা অনুসরণ করে না?
উদাহরণ কোড:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, ReLU
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
batch = 1000
def tests():
while True:
test = np.random.randn(batch)
# Generate ReLU test case
X = test
Y = test.copy()
Y[Y < 0] = 0
yield X, Y
model = Sequential([Dense(1, input_dim=1, activation=None, use_bias=False)])
model.add(ReLU())
model.set_weights([[[-10]]])
model.compile(loss='mean_squared_error', optimizer='sgd')
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = []
self.weights = []
self.n = 0
self.n += 1
def on_epoch_end(self, batch, logs={}):
self.losses.append(logs.get('loss'))
w = model.get_weights()
self.weights.append([x.flatten()[0] for x in w])
self.n += 1
history = LossHistory()
model.fit_generator(tests(), steps_per_epoch=100, epochs=20,
callbacks=[history])
fig, (ax1, ax2) = plt.subplots(2, 1, True, num='Learning')
ax1.set_title('ReLU learning ReLU')
ax1.semilogy(history.losses)
ax1.set_ylabel('Loss')
ax1.grid(True, which="both")
ax1.margins(0, 0.05)
ax2.plot(history.weights)
ax2.set_ylabel('Weight')
ax2.set_xlabel('Epoch')
ax2.grid(True, which="both")
ax2.margins(0, 0.05)
plt.tight_layout()
plt.show()
অনুরূপ জিনিসগুলি যদি আমি পক্ষপাত যুক্ত করি তবে ঘটে থাকে: 2 ডি ক্ষতির ক্রিয়াটি মসৃণ এবং সহজ, তবে যদি রিলুটি উল্টে শুরু হয় তবে এটি চারদিকে বৃত্তাকার হয়ে যায় এবং আটকে যায় (লাল প্রারম্ভিক বিন্দু), এবং নূন্যতমের নিচে গ্রেডিয়েন্টটি অনুসরণ করে না (এটি পছন্দ করে) নীল শুরুর পয়েন্টগুলির জন্য):
যদি আমি আউটপুট ওজন এবং পক্ষপাতও যুক্ত করি তবে অনুরূপ জিনিসগুলি ঘটে। (এটি বাম থেকে ডানদিকে বা ডাউন-টু-আপ ফ্লিপ করবে তবে উভয়ই নয় not)