На этом шаге мы одну интересную особенность глубокого обучения.
Модели глубокого обучения обладают одним интересным свойством: их можно обучить подстраиваться под что угодно, если они обладают достаточной репрезентативной способностью.
Не верите? Попробуйте перемешать метки в обучающей выборке из набора MNIST и натренировать на ней модель. Несмотря на отсутствие связи между входными данными и перетасованными метками, потери на обучающей выборке снижаются очень хорошо даже в случае относительно небольшой модели. Естественно, потери на проверочной выборке не улучшаются со временем, поскольку отсутствует возможность обобщения.
(train_images, train_labels), _ = mnist.load_data() train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images.astype("float32") / 255 random_train_labels = train_labels[:] np.random.shuffle(random_train_labels) model = keras.Sequential([ layers.Dense(512, activation="relu"), layers.Dense(10, activation="softmax") ]) model.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) model.fit(train_images, random_train_labels, epochs=100, batch_size=128, validation_split=0.2)
Фактически не обязательно даже использовать данные MNIST - можно просто сгенерировать белый шум и случайные метки. Вы все равно сможете обучить модель под эти данные, если у нее будет достаточно параметров. Она просто запомнит определенные входные данные, подобно словарю в языке Python.
Если это так, то откуда у моделей глубокого обучения может взяться способность к обобщению? Разве они не должны просто выучить связи между обучающими данными и целями, подобно своеобразному словарю dict? Разве можно ожидать, что этот словарь будет находить выходные значения для новых ключей на входе?
Оказывается, природа общности в глубоком обучении мало связана с самими моделями глубокого обучения - она намного сильнее связана со структурой информации в реальном мире. Посмотрим, что происходит на самом деле.
На следующем шаге мы рассмотрим гипотезу многообразия.