Neural
The growing interest in the development of artificial intelligence is associated not only with the increase in computer performance, but also with a number of qualitative breakthroughs in the engine Training. And although everything is systematically going to the fact that neural success is more than likely, and there is very little doubt about the possibility of creating a strong AI in the foreseeable future, one important aspect of this process is given undeservedly little attention.
To build artificial intelligence there are two fundamentally different approaches, let’s call them conditionally algorithmic and with the help of self-learning. In the first case, you must manually write down all the rules by which the intellect operates, and in the second you need to create an algorithm that will itself learn on some large amount of data, and allocate these rules yourself. neural As we already know, the algorithmic path suffered a catastrophic fiasco. And it’s sad, because this way is more “right”. Although it has its drawbacks, like exploding robots from a logical paradox (a joke, although not, really), but such a robot will never do what it is not programmed for.
But it’s not even that important, but the fact that it’s an academic task. Understand how consciousness, intellect, and intelligence work. Defeat in this area is like a slap in the face of our own intelligence. Why did not it work out? Basically, this is a combinatorial explosion problem. neural The mind of our level operates with too many concepts and their relations. In the developed language, about 500 thousand words, and probably also the same, and maybe even more, sensual images, which have not yet been given a verbal definition. In total, the human level intellect must operate with not less than a million neural concepts and their mutual relations. Let it not bother you that in practice people use about 2000-30000 thousand words (2000 is the necessary minimum for free neural communication in another country, see Simplified neural English, and writers like Shakespeare use about 30 thousand words). It’s just generalized and most frequently used words in those routine things and situations that we call life. But in fact, the developed neural brain operates with a much larger number of “internal” concepts, which, if desired, it clings to these common words. Although 30 thousand is a large number. Imagine that your dog neural could distinguish between 30,000 words. Understand what each of these words means and respond to each one in different ways. Definitely, she would have been much smarter. And even surely with it it would be possible to maintain a conversation.
“Algorithmic” way
An ancient computer experiment is known when they attempted to describe manually the created rules the relationship of simple geometric figures in a virtual scene. “Round ball”, “the cube can move another cube”, “the ball can roll”, “the pyramid can lie on the cube”, and so on. It turned out that when the number of objects in the scene is more than five, it is very difficult to manually describe all their possible physical interactions. And with a number more than ten, it is no longer possible. And we need to do such a manual description not less than for a million concepts! Combinatorial explosion.
It was he who caused the failure of expert systems. Of course, first of all we tried to find common rules that would simplify the number of required descriptions for concepts. After all, it is obvious that only those who have legs can walk. Therefore, we can write one rule describing walking, for all walking objects. And still the number of concepts for which you need to manually write rules, and most importantly – the amount of their possible interactions with each other, is incredibly great. And in fact we have that we could not do it. Even with the use of all available methods of machine learning, which allowed to build such rules in a partially automatic mode (see, for example, the algorithm for constructing decision trees, which in essence represent the logic of the work of a robot with “algorithmic” artificial intelligence).
Another clear example is the failure of automatic algorithmic translators. To build general rules that completely describe two different languages, in essence, create rules by which the mind operates, which operates with these languages. One person can know two languages, so describing the general structure of the two languages (so that they can be converted into one another) is not the same as describing the syntax rules for one particular language. To create rules simultaneously for two languages means to describe their general structure, and hence the general structure of the person who uses them. Those who were engaged in creating knowledge bases for such algorithmic translators can tell in more detail what difficulties they encountered. But in general, the difficulties are reduced to a combinatorial explosion, and to the fact that concepts actually used in thinking are greater than words. Moreover, literally in a year or two the language changes, some rules become obsolete and translation with their help will be perceived comically. Again it will turn out “-How do you do it? -Always right!” (“-How do you? -All right!”). The last case of such an attempt to manually create a knowledge base for an automatic translator that comes to mind is ABBYY Compreno. A great undertaking, a lot of work, but it seems to have ended like previous attempts.
Self-study
And as for the approach with self-study, it’s easy with him. We need an algorithm and we need data for training. From the second until recently, at least to the developed Internet with a lot of content, it was tight. But having collected all will and self-control in a fist, it is necessary to recognize that with the algorithms of machine learning the situation, until now, was so-so … There have long been libraries of books containing enough material to create on their basis an artificial intelligence. Why did we screw up again? For the first time with the manual construction of rules, and now with machine learning from books. If there was a simple answer to this, then we would have done everything. But, it seems, with the latest achievements in the field of weak AI, the solution and the answer to this question have become closer.
Several factors coincided here:
1. The growth of computing power. Basically, parallel computing on the GPU, which made it possible even for ordinary people to easily repeat the results of the latest scientific work (which was previously unavailable, at least if you did not have a personal supercomputer). Yes, yes, you understood correctly. For such wonderful frameworks, such as TensorFlow + Keras, copies of the most advanced architectures of neural networks are created. All that you have heard in the news about neural networks and their achievements over the past few years, you can repeat on your home computer. Literally within a few minutes, necessary for downloading these libraries. Of course, giants like Google can afford to run a calculation on 1000 computers with a GPU with 12 Gb of video memory on board for a couple of weeks. But the usual desktop gaming computer also gives now a lot of room for maneuver.
2. Increase data for training. The ImageNet images database contains about 10 million photographs, manually tagged for more than 1,000 categories. Impressive result, considering that the first attempts at pattern recognition were undertaken with databases of several hundred samples.
3. But, most importantly, new effective methods of training have appeared. Since the old algorithms, we still can not achieve anything intelligible, even from the new increased data volumes. And it speaks for itself (although it’s sad, I repeat).
If you can not find a way out, exit through the entrance
Of course, different combined methods are possible. Somewhere we use self-education, somewhere manually write the rules. That’s exactly what is happening now. Google Assistant, Siri, IBM Watson – all of them use machine learning (usually a neural network) to recognize speech and pictures, and for manual work written rules. Watson in general, apparently, is a terrible mix of ancient expert systems and modern highly specialized modules for recognition. Moreover, this approach now seems most promising. Only with the reverse order – we do not write rules for primitive recognizers, but we need to create AI of our level, and give it access to all the algorithmic power of modern computers. And such early attempts are already being made, for example, the Neural Turing machine, where they try to teach the neural network to use a hard disk to store structured data. With a number of limitations, but the essence is exactly that.
I want to believe that we will still master this task, and with the help of machine methods we will create the AI automatically, and then with the help of these same machine methods we will simplify the resulting set of rules to the minimum possible. And we get the same algorithmic strong AI. It would be great. The Holy Grail of Robotics. And in general, our reason for studying ourselves.
So what exactly has changed? From such a HYIP about AI recently?
Neural networks
It’s no secret that after a long winter in the realm of AI, the coming spring owes its appearance to the modern development of deep neural networks. The point is that the neural networks that existed before were qualitatively limited to only two layers. After the first two (more precisely, the last) layers, the gradient, by which the error back propagation method is learned, becomes less and less quickly due to mathematical characteristics. The weights between the neurons of the other layers cease to influence the result, and it turns out that only the last two layers of the neural network actually work, and the rest are empty ballast. Of course, neural network architectures were invented a long time ago with a variety of ways of learning, but since they did not justify themselves (at least for now), then we will only talk about the most successful model of an artificial neural network – perceptrons and their Closest relatives.
The decision on efficient learning of multilayered neural networks was surprisingly simple: that if we take one input layer, add only one intermediate layer to it, and make an exact copy of the first input layer by the third layer (output). And to force the neural network to learn at the output to make a copy of the first (i.e., input) layer. If the number of neurons in the inner layer is less than in the input layer, then the neural network will have no choice but to somehow compress the information. And this is the extraction of certain common signs. Such a thing is called auto-encoder and it is perfectly trained by the standard method of back propagation of the error, since it is a usual single-layer perceptron.
And what if we now discard the third (output) layer and use the middle layer as the input for the next autocoder?
In this way, it is possible to collect what plethora of layers in the total aggregate neural network. And each such layer will be perfectly trained!
What is the physical meaning of this, besides solving the problem of the vanishing gradient? The fact is that in the first layer (in the first auto-encoder) some simple signs will be allocated. For example, vertical and horizontal lines, if we are talking about image recognition. The second layer (the second autonecoder) at its input will no longer receive the original pixels of the picture, but only vertical and horizontal lines. And already from these lines to distinguish the signs of a higher abstract level: squares, circles, polygons. The third layer will receive these abstract simple figures on its input and will operate only on them, selecting from them, say, a schematic figure of a person (“stick, stick, cucumber – that’s the man coming out!”). All that we lack for complete happiness, is to add one or two layers of the usual perceptron at the output of such a multilayered multi-encoder network in order to classify the result of the latest autoencoder. Divide the men into classes or output in a convenient form (x, y) the coordinates of the figure in the picture.
The good news is that our own brain (at least, vision) works in this way. On the very first neurons associated with the retina of the eye, only simple lines and gradients of brightness are recognized. This is the result of the work of the first layer of a convolutional neural network, which will be lower
. On the next layer, neurons are activated as a reaction to more complex shapes.
, The next on even more complex, and so on. At some point, approximately on the tenth layer and after about 100 ms from the moment the photons hit the retina (processing on each layer takes 10-20 ms, so our brain, to put it simply, is a ten-layer neural network), the increasing complexity of the recognized Images reaches such a level that we determine that we have a beautiful girl standing in front of us, and the nervous impulse from the tenth layer begins to run to the muscles of the face so that we begin to smile. Extremely effective application of the neural network, developed by evolution for the continuation of the genus.
Moreover, all this is confirmed experimentally on scanners and direct connection of electrodes to different groups of neurons in the brain. To train, according to the glorious old tradition (or not glorious in this case, given the invasiveness of the method) started on cats. More details in a remarkable article on the work of sight and the convolutional neural networks closest to it according to the principle of action: Survey of the topologies of deep convolutional neural networks
Description of the experiment with a cat. Electrodes are connected to individual neurons (more precisely, to small groups). It turned out that some neurons react to simple figures like lines, while others to complex figures made up of simple ones
Despite its simplicity, the idea of such layer-by-layer training of the neural network was practically realized only in the middle of the 2000s (although And before that they tried to pre-coat the initial layers in a multilayer perceptron using methods without a teacher, but not so successfully). We must understand that such a method of teaching deep neural networks (and not even quite the same, since everything started with limited Boltzmann machines, but the essence is the same) was the first swallow that informed about the new neural network revolution. Since that moment, progress has gone far ahead, now autoencoders and their analogs in pure form are practically not used (they were replaced by new regularization methods and layers like convolutional or recurrent ones), and the zoo of neural network architectures has grown to indecent sizes. A brief reminder of the various types of modern neural networks can be seen here: Zoo of neural network architectures. Part 1 and Part 2. Of the two parts. Short. Aha.
It turned out that in the encoder the inner layer can be made no less, and more than the input one. And that the signal does not pass through without changes (we need to implement something like compression in order to isolate the signs), let’s accidentally turn off input neurons or mix random quantities to them, emulating random noise. This turned out to be even more useful than a pure auto-encoder, as it allows to recognize noisy data. In general, the idea of accidentally turning off a part of the neurons during training, the so-called. Dropout (sometimes up to 50% of the entire neural network!) Was very useful. In a way, this is an approximation to a biological sample, since the activity of neurons in the living brain is also partly random. For details, I’ll send you to a wonderful and highly recommended article for reading about modern types of neural networks and how we got to that kind of life. [1949006]
Strictly speaking, it is not necessary to train the neural network by the method of back propagation of the error. There are variants of probabilistic learning, there is something like annealing, when the material gradually cools down, lowering its temperature in a similar way to the natural process (only in the role of numbers-temperature readings, we have numbers in scales between neurons). There are emulations of activation of biological neurons, when the connection is amplified with frequent activation, including with the emulsion of inhibitory neurons. There is even training the weights of a neural network with the help of a genetic algorithm or an ant colony method. After all, in the end, we just need to pick up numbers in the weights of the neurons, so that the signal from the input is as good as possible and correctly reached the desired output. And the method of selecting these numbers is not so important, if only it fulfilled its function. Simply gradient descent by the method of back propagation of the error is one of the fastest, and with modern modifications like adam (comparison of modern methods of learning neural networks: Methods for optimizing neural networks), it almost does not get stuck in local extremes.
In order not to increase the size и так непомерно раздувшейся статьи, краткое описание наиболее интересных и перспективных для сильного ИИ архитектур современных нейросетей убраны под спойлеры.
Сверточные ейронные сети
Отдельно стоит отметить сверточные нейронные сети. Вот стандартная картинка из википедии, служащая для иллюстрации ее принципа работы. Не знаю как вам, а мне она была долгое время непонятна, хотя написанием собственных реализаций нейронных сетей (не сверточных) и их ансаблей я занимался еще лет 20 назад, когда готовых библиотек для этого дела в интернете просто не было. Потом, как и многие в то время, столкнулся с типичными проблемами вроде исчезающего градиента и недостатка вычислительной мощности, и все забросил. Хорошо, что брошенное знамя подобрали другие.
На самом деле сверточные сети работают так. Сначала мы решаем, сколько признаков хотим выделить из картинки. Это будет количество плоскостей (второй большой квадрат на картинке, обозначенный feature maps). Например, если мы хотим найти вертикальные линии, горизонтальные и диагональные, нам достаточно 4 плоскостей (т.к. диагональные могут быть двух видов: / и ). После этого решаем, какого размера должен быть фильтр, которым будем проходить по картинке. Это размер маленького черного квадратика, допустим, 3х3 пикселя. И заполняем его какими-нибудь числами, графически кодирующими примитив, который хотим найти. К пример, заполняем четверками по диагонали, чтобы искать наклонную линию . А потом проходим им как скользящим окном по всей исходной картинке, и перемножаем пиксели на картинке на пиксели в нашем маленьком квадратике-фильтре, и суммируем результат. Получаем одно единственное число, характеризующее насколько картинка под скользящим окном похожа на картинку в фильтре. И записываем это число в плоскость, соответствующую этому фильтру. Картинка ниже лучше объясняет принцип.
Иллюстрация с лекции Яндекса
Здесь маленький синий квадратик между плоскостями почти что кодирует диагональную линию из левого верхнего угла в правый нижний, если бы у него по диагонали были все четверки (к сожалению, иллюстрация нашлась только такая, с нулем в центре и -4 в нижнем правом углу). Область на исходной картинке немного похожа на такую диагональную линию, так как там есть 1 и 2, которые умножались бы на 4, соответствующие положениям этих 1 и 2. И общая степень похожести была бы 0*4+1*4+2*4=12 (вместо -8 на картинке). А вот если бы на исходной картинке по диагонали тоже были бы четверки, а еще лучше десятки! («летят n самолетов, нет, n мало, пусть будет k. и оба реактивные»). Тогда степень похожести была бы 10*4+10*4+10*4=120. Чем больше число, тем лучше.
На самом деле, мы не знаем какие именно графические примитивы мы хотим искать, а главное, какие из них окажутся важными для распознавания, например, морды лица кота на фото. Поэтому мы просто создадим заведомо избыточное количество плоскостей. Каждая из плоскостей составляет как бы карту, на которой отмечены места, где на картинке встречаются наиболее похожие на ее фильтр участки. Как на символ в примере выше. Как правило, в сверточных сетях в первом слое используется 100-200 плоскостей, чтобы перекрыть все возможные типы простых примитивов. Еще зависит от размера фильтра, чем он больше по размеру, тем большее разнообразие примитивов может вместить, и тем больше нам надо плоскостей-карт для них. И инициализируем веса принадлежащих им окошек-фильтров случайными числами. Нейросеть сама разберется, какие придать им значения в процессе обучения. Что удивительно, обученные на реальных фотографиях сверточные нейросети в первом слое создают именно такие же примитивы, вроде наклонных линий и пятен разной яркости (см. выше картинку), на которые реагируют нейроны первого слоя у живой кошки. И, надо полагать, у человека тоже.
Какие во всем этом плюсы?
Во-первых, уменьшается число нейронов по сравнению с полносвязным перцептроном, а это экономия памяти и ускорение расчета.
Во-вторых, выходные плоскости-карты признаков используются дальше как входные картинки для следующих сверточных слоев. Что позволяет строить глубокие многослойные сети, в которых каждый слой все так же прекрасно обучается. По сути, тот же принцип, что у автоэнкодеров выше, которые предвестили новый рывок нейросетей. Следующий слой работает уже не с пикселями исходной картинки, а с линиями как абстрактными объектами. И генерирует на выходе квадраты, круги, треугольники. Которые используются как входы для следующего слоя, который из этих фигур распознает фигуру человека.
В-третьих, сверточные сети позволяют определять не только факт наличия признака на картинке, но и его положение. В каком-то слое лицо человека будет распознано не просто по наличию где-то на фотографии глаз и рта, а по тому, что левый глаз расположен именно выше и левее, правый выше и правее, а рот ниже их обоих и по центру. Тут можно провести аналогию с каскадами Хаара, которые использовались раньше для распознавания лиц в методе Виолы-Джонса. Только сверточные нейронные сети могут распознавать не только графические примитивы вроде горизонтальных/вертикальных полос, но и такие сложные абстрактные понятия как «попугай». Если «попугай» расположен на правом плече абстрактного объекта «человек с деревянной ногой», то с большой вероятностью этот объект «пират». В этом сила сверточных (и других многослойных) нейронных сетей.
В-четвертых, сверточные нейронные сети в целом повторяют устройство нашего зрения (как сигналы от сетчатки проходят первичную обработку и попадают в мозг), поэтому работает схожим образом. И хотя повторяют те же ошибки в оптическом распознавании, что и мы, но и делают точно такие же эффективные акценты в тех местах на фото, где делаем мы.
Все это сделало сверточные сети такими эффективными в задачах распознавания.
Рекуррентные сети
Благодаря обнаруженному десять лет назад способу эффективно обучать многослойные сети, а также успехам сверточных сетей, другие типы нейронных сетей тоже получили мощный импульс для развития. Хочется отметить прежде всего рекуррентные нейросети, в частности LSTM и ее более позднего родственника GRU (хотя LSTM появилась даже раньше применения автоэнкодеров в глубоком обучении). По сути, любая рекуррентная нейросеть аналогична поставленным в ряд нескольким обычным, где каждой из них на вход подается вектор данных, соответствующий ее моменту времени. Так как время реакции человеческих нейронов порядка 10 мс, то обычно это число и используется для дискретизации входного потока. Будь то звук для распознавания речи, или видео, или еще какой процесс, который нам кажется непрерывным.
Использовать несколько обычных нейросетей, каждую для своего отдельного момента времени неудобно, так как длительность входного сигнала может быть разной, а зачастую сигнал вообще полностью непрерывный. То есть бесконечной длины. Поэтому в рекуррентные нейросети встроены запоминающие элементы, которые помнят что было в предыдущие моменты времени, и подмешивают тот старый сигнал к текущему. Здесь возникает сложный вопрос, что именно запоминать (критерии могут быть разными, например, по необычности сигнала. Или по частоте повторяемости), а также как быстро забывать старые моменты времени, чтобы этот подмешиваемый сигнал не вырос до бесконечности. В целом, этот вопрос пока до конца не решен, хотя существующие реализации рекуррентных нейросетей вроде LSTM и GRU показывают неплохие результаты. И, несомненно, за рекуррентными сетями большое будущее, так как большинство процессов в физическом мире требуют анализа в реальном времени.
GAN
Другим крайне интересным типом нейросетей являются конкурирующие нейронные сети GAN. Принцип очень простой — пусть одна нейросеть инициируется на входе случайными числами и случайными весами и, соответственно, выдаст на выходе случайный результат. Например, массив цветов пикселей для картинки. А другой нейросети мы на вход подаем две картинки — одну сгенерированную первой нейросетью (сейчас она случайная), а вторую настоящую. Какую-нибудь фотографию природы, например. Так как мы знаем какая картинка настоящая, а какая сгенерирована первой нейросетью, то мы можем указать это второй. И научить ее, чтобы для фэйковой картинки она поставила число 0, а для настоящей 1.
Теперь изменим как-нибудь веса в первой генерирующей нейросети, чтобы она сгенерировала такую картинку, которую вторая нейронная сеть не сможет отличить от настоящей фотографии. Градиентным методом обратного распространения ошибки, или любым другим способом обучения. Но в это же время второй нейросети опять говорим, какая фотография настоящая, а какая фейковая (мы-то знаем это наверняка, так как контролируем процесс). И снова научим ее отличать настоящую от фейковой еще лучше, чем раньше. И будем так повторять снова и снова. Первая нейросеть все время будет учиться генерировать картинки, чтобы вторая не смогла их отличить от настоящих (пользуясь оценкой, которую дает вторая нейросеть ее творчеству, в пределах 0..1, и стремясь, чтобы та дала ей 1, т.е. не отличила от настоящей). Но вторая нейросеть тоже будет постоянно учиться отличать все лучше и лучше фейковые картинки от настоящих. С помощью нашей читерской подсказки, какая из них какой является на самом деле.
Такой подход дает впечатляющие результаты по «творчеству» нейросетей. Это так же используется, чтобы генерировать похожие на настоящие наборы данных, если настоящих данных у нас по каким-то причинам мало. На этом видео можно посмотреть, как GAN учится генерировать кошачьи морды, похожие на настоящие: https://www.youtube.com/watch?v=JRBscukr7ew.
Или человеческие лица
Да, кривовато, но это были первые успешные опыта такого рода, сейчас уже есть примеры получше. И надо учитывать еще тот факт, что мы, люди, слишком хорошо распознаем несовершенства на человеческих лицах. В этом была эволюционная необходимость, чтобы распознавать болезни. Кто плохо умел распознавать болезненные лица, тот оставлял меньше потомства, поэтому их конкурентов в процентном отношении оказывались больше. Со времененем конкуренты окончательно подавили их количественно, поэтому к нашим дням остались потомки только тех, кто хорошо распознавал лица. Вы прослушали краткий курс как работает естественный отбор, все встают, аплодисменты, расходимся.
А вот спальни генерируются куда как лучше (вероятно потому, что мы хуже распознаем несовершенные детали на них):
Но самая потрясающая часть нейросетей типа GAN, это способность манипулировать тем, что будет нарисовано. Так как генерирующую нейросеть мы инициировали случайным набором чисел на входе, то она построила картинку, соответствующую этому набору. Сделала классификацию наоборот, так сказать. Поэтому мы можем взять два входных вектора от разных сгенерированных картинок и манипулировать ими как обычными числами: складывать, вычитать, умножать.
К примеру, один случайный набор чисел (входной вектор) сгенерировал мужчину в очках. А другой случайный набор дает мужчину без очков. И третий дает женщину. Мы можем из первого вектора вычесть второй и в разнице получим те числа, которые определяют очки. А потом сложить с третьим набором, который определяет, что будет нарисована женщина. И подадим результат как вектор чисел на вход генерирующей нейросети. И она, тарам-папам!, сгенерирует женщину в очках! и с бородой Это удивительная магия, если не знать что за ней стоит.
Аналогично можно работать с любыми признаками, которые мы видим на сгенерированных картинках. Но сначала надо нагенерировать множество фото на случайных векторах, конечно. К примеру, таким способом можно состарить или омолодить человека на фото, если у нас где-нибудь найдется сгенерированная фотография пожилого/молодого человека. Качество следующей иллюстрации показывает, насколько быстро идет прогресс в этой области.
Иллюстрация из работы https://arxiv.org/abs/1702.01983v1
К сожалению, GAN нейросети очень сложно обучать. Так как обе нейросети, и генерирующая, и оценивающая, должны развиваться примерно на равном уровне. Если генерирующая научится обманывать оценивающую раньше, что та никогда не сможет отличить ее творчество от настоящих фотографий, то процесс обучения потеряет смысл, застопорится. Аналогично, генерирующая никогда не сможет научиться делать реалистичные картинки, если оценивающая всегда будет ставить ей 0, т.е. что распознала фейковость. А значит не будет никакого градиента, по которому можно обучаться. Псеводослучайные алгоритмы обучения, вроде метода Монте-Карло, и даже их разновидности с накоплением положительных изменений, такие как генетический алгоритм, работают слишком медленно для практического применения.
Подробнее про генеративные нейронные сети (к которым относится GAN) можно почитать тут: Generative Models.
Обучение с подкреплением
Еще одна быстро развивающаяся область, это обучение с подкреплением. Суть ее сводится к тому, что нейронная сеть обучается по параметру, который оценивает ее работу не прямо сейчас, а через некоторое время. Скажем, нужно выиграть в компьютерную игру, набрав максимум очков. Но очки даются не в тот момент, когда нейросеть нажимает на клавишу движения или поворота, а через некоторое время. Это может быть, например, какой-то бонус на уровне, до которого еще нужно добраться.
Обучение с подкреплением чем-то похоже на то, как учатся живые люди. Поэтому это тоже очень перспективное направление, хотя и находящееся пока на самом начальном уровне. К сожалению, математический аппарат построения функции полезности действий (штука, которая управляет текущими действиями нейросети, чтобы получить награду в будущем) довольно сложно объяснить на пальцах, поэтому заинтересовавшимся лучше поискать материал самостоятельно.
Во всем этом главное понять и проститьчто принцип глубоких нейронных сетей заключается в таком послойном обучении, чтобы постоянно от слоя к слою возрастал уровень абстракции. Этот принцип чертовски здорово уменьшает требование к количеству нейронов в нейронной сети. Все то же самое, что показывают сейчас лучшие образцы нейронных сетей, можно было сделать и обычным одно-двухслойным перцептроном. Только количество нейронов для этого потребуется за гранью разумного.
По сути, известная теорема о том, что однослойный перцептрон может аппроксимировать любую функцию, означает всего лишь, что мы можем использовать нейронную сеть как справочную таблицу. Действительно, если каждый входной нейрон соединен с каждым нейроном среднего скрытого слоя, то мы можем для нужных весов поставить 1, а для всех остальных 0. И по этой связи со значением 1, сигнал напрямую пойдет к выходу, как ссылка в таблице. Однако размер этой таблицы (число нейронов в скрытом слое) должно быть, если не ошибаюсь, 2^n от числа понятий-записей в таблице.
Но заметьте, эта теорема означает только то, что мы можем обучить однослойную нейронную сеть на обучающей выборке и использовать ее как справочную таблицу. Но это вовсе не значит, что на новых данных она будет так же хорошо работать! Если новых данных нет в нашей супер-таблице, то все пропало, шеф. Поэтому многослойные сети работают несколько хитрее в плане интерполяции и смешивания сигнала, чем однослойные.
Поэтому те же сверточные нейросети, помимо того что имеют сходство со зрительной системой человека, на самом деле тоже служат в том числе для уменьшения количества нейронов в сети по сравнению с ближайшими аналогами. Впрочем, в обоих случаях может лежать одинаковый принцип уменьшения числа необходимых для работы нейронов. Известно, что наши глаза по количеству воспринимающих свет колбочек и палочек соответствуют картинке примерно в 120 мегапикселей (для каждого глаза), но нервный канал, соединяющий глаз с мозгом, физически не способен провести такое количество информации через себя. Количество нервных волокон в зрительном нерве составляет примерно 1.2 млн, что соответствует картинке чуть более одного мегапикселя для каждого глаза. То есть уже в нервных клетках, непосредственно связанных с глазами, еще до обработки сигнала мозгом, происходит сжатие видеоряда в 100 раз.
С этим, кстати, связаны различные глюки нашего зрительного восприятия. Зрительные иллюзии, вот это все. Более того, аналогичные иллюзии возникают и в других областях нашего мышления, в психологии, в инстинктах, в речи (Вики: Иллюзия). Везде, где происходит аналогичное по принципу сжатие сигнала с помощью нейронов. То есть везде.
Просто лист бумаги, сложенный определенным образом
Благодаря тому, что глубокие многослойные нейросети позволяют меньшим числом нейронов достичь большей сложности, и получены все вдохновляющие результаты последних лет. Глубокие нейронные сети уже сейчас в отдельных областях превзошли человека: в распознавании дорожных знаков, определении классов при большом числе категорий (ResNet, ошибка определения одной из тысячи категории для 10 млн картинок 3.57%, а у человека среднее 5%, но не качественно, увы, и к этому мы позже вернемся. Внезапный диван леопардовой расцветки), в распознавании речи, чтении по губам. И очевидно, что в ближайшие годы мы услышим еще о многих подобных примерах.
Итак, мы научились правильно обучать многослойные нейронные сети. А также знаем, что наш собственный мозг представляет собой примерно десятислойную нейронную сеть (для первичного распознавания объектов высшего уровня абстракции, а далее непрерывно работает как рекуррентная сеть). И, технически, мы теперь можем сделать некий аналог человеческого мозга. Так почему сильный ИИ до сих пор не создан, что пошло не так?
Для начала необходимо заметить, что научного определения для сознания, разума и интеллекта в интересующем нас контексте не существует. Это философские понятия. Слово есть, а ж.. определения нет. Если вдумчиво придираться к каждому слову в существующих так называемых «определениях» интеллекта, искусственный он или нет, то выяснится, что одни философские термины объясняются другими философскими терминами. Предложения закольцовываются, петляют, но никогда не приходят к финалу. В любом существующем определении сознания или интеллекта можно подобрать пример, который будет удовлетворять этому определению, но не будет разумным.
Можно посмотреть на это иначе — если бы определение искусственного интеллекта существовало, то он был бы уже создан. Определение чего либо (если оно не философское и не иное ненаучное) можно рассматривать как прямое ТЗ для программиста.
Единственная форма разумной жизни, которая нам известна — это мы сами. Поэтому то интуитивное понимание интеллекта (разума, сознания), которое есть у нас всех, и которое так глупо и безуспешно философы пытаются облечь в слова, на самом деле, простая степень похожести на нас самих. Что-то вроде расширенного теста Тьюринга. Если мы будем слышать рассказ о том, как некто что-то делает в некоторых ситуациях, как он поступает и какие решения принимает, и не сможем отличить его от человека (при достаточном количестве информации, позволяющей делать обоснованные выводы), то это и будет критерием разумен он или нет. Даже если в реальности это окажется двуногий робот-гуманоид или написанная чат-программа. Других способов определить интеллект пока не существует. И даже этот метод несовершенен, так как нет критерия когда объем информации станет достаточным для выводов.
Кратко это можно описать так: от искусственного интеллекта мы ожидаем то же, что от разумного нормального человека. В разговоре, в действиях, в его решениях. Только с поправкой на отсутствие полового влечения, например. Или имеющего расширенную память, включающую весь интернет и мгновенный доступ к ней. Или имеющий быстродействие (скорость мышления) в тысячи раз быстрее биологического образца. Но это остается «все тот же человек».
Поэтому задача создания искусственного интеллекта сводится к тому, чтобы он был максимально похож на нас. Другие возможные формы искусственного интеллекта, например, действующие по каким-то другим, отличным от наших, правилам, являются очень интересной темой для рассуждений. Но, к сожалению, на данный момент такие рассуждения возможны только как философские. То есть не имеющие адекватного научного определения под собой.
Как же нам добиться создания сильного ИИ хотя бы нашего уровня? Да в принципе, ничего особо делать не надо. Так как в некоторых когнитивных областях, которые компьютеру ранее казались в принципе недоступными, вроде качественного распознавания речи и образов, нейронные сети сравнялись и обошли человека. Поэтому есть обоснованная надежда, что из таких простых строительных блоков со временем возникнет что-то более сложное. Грубо говоря, выход с ResNet надо отправить на другую не менее сложную нейросеть (которая еще не создана), результат ее работы отправить на модуль генерации неотличимого от человеческого голоса, и так далее. Вполне возможно, что из этого и правда вырастет сильный ИИ. Это кажется тем более реальным, как только представишь, что нейронная сеть научится хорошо восстанавливать 3d сцену по обычному видео с youtube. И по роликам научится понимать куда и как люди движутся, что делают и т.д… Почему именно по видео это может дать результат, а по книгам (описывающим в текстовом виде все те же действия) не дало? Об этом ниже.
И такие попытки уже делаются! Нейронные сети уже довольно неплохо определяют нормали по фото и поле глубины, а от этого один шаг до полноценной реконструкции 3d сцены.
Иллюстрация с лекции Нейронные сети: практическое применение
Тут еще нужно заметить, что вычислительная мощность для применений в нейронных сетях все еще смехотворно мала. Например, у обычной мухи дрозофилы порядка 150 тысяч нейронов. А когда мы перевалили за первую тысячу нейронов в искусственных нейросетях? Совсем недавно. Правда, наши сети намного эффективнее для узких задач. Даже самые мощные суперкомпьютеры по производительности вычислений на ватт энергии, пока примерно равны мозгу мыши. Есть надежда, что в ближайшие 10-20 лет будет создан компьютер, обладающий такими же параллельными вычислительными возможностями, как человеческий мозг, и потребляющий всего 10 кВт. И это лучшее, на что можно надеяться. По сравнению с 20 Вт у человеческого мозга. Шутка. Надеяться всегда можно на лучшее. Представляется что-то вроде SD карты на сотни гигабайт, в которой ячейки смогут параллельно производить простые математические операции (сумматора будет вполне достаточно). С учетом частоты в гигагерцы (и, в перспективе, в терагерцы) по сравнению с 100 Гц биологического нейрона, это моментально превысит вычислительные возможности нашего мозга.
Недостаток текущей вычислительной мощности для нейросетевого применения тем более удручает, что существует масса других более формальных методов машинного обучения, выполняющих ту же задачу, что и нейронные сети (например, для задач классификации метод опорных векторов или случайный лес деревьев решений), но менее требовательных к ресурсам. К сожалению, в тех задачах, где сейчас сильны нейросети, они им сильно уступают. Правда, здесь можно сослаться на интересную статью, в которой показывается, что большую роль играют данные для обучения и знания о том, какие результаты можно получить с такой-то архитектурой, а также вера исследователя в успех. Грубо говоря, еще 20 лет назад можно было достичь тех же результатов, что и сейчас. Набери тогда исследователи достаточную обучающую выборку и запусти расчет на большее время (пропорционально росту производительности компьютеров с тех пор). Но для этого они должны были знать, что могут получить, и верить в свой успех. Так или иначе, а история не знает сослагательных наклонений.
Но вполне возможно, что успехи нейронных сетей вызваны просто общим интересом к ним, а значит и количеством задействованных ресурсов. Но не будем обманывать себя и питать ложные надежды =). У нейронные сетей, как метода машинного обучения, действительно есть свои интересные особенности, доказательством чему служит вал научных работ последних лет. В основном, посвященных многослойности и вытекающих из этого следствий. Так что, похоже, нейросети с нами всерьез и надолго.
Другая проблема в данных для обучения. На самом деле, их нет. ImageNet с 10 млн маркированных картинок это большой успех, но возьмите любую задачу, к которой вы могли бы применить самые новейшие нейронные сети, и окажется, что данных для обучения нет. Это прекрасная возможность и стимул разрабатывать методы обучения нейросетей, не требующих больших объемов обучающей выборки. В идеале, они должны работать даже на единичных примерах. Как наш мозг.
Ну когда же конец
И все же, почему сильный ИИ до сих пор не создан? И даже нет намеков, а вернее, четко обозначенных путей, по которым к нему можно прийти в ближайшее время?
И здесь наступает грустный момент нашей повести. В точности с концепцией героя с тысячью лицами, после начальных вдохновляющих успехов, главный герой попадает в сюжетную яму. Из которой он потом будет долго и мучительно выбираться.
Дело в том, что многие качества разумного мышления, которые мы считаем само собой разумеющимися, на самом деле не являются таковыми. Не хочется показаться голословным, а тем более исказить детали и выступить в роли испорченного телефона, но то, о чем дальше пойдет речь, является компиляцией из разных источников (научные статьи, новости, телевизионные документальные фильмы и т.д.), поэтому быстрое гугление первоисточников не принесло особого результата. Если кто-то поделится ссылками на что-нибудь из перечисленного ниже или похожего, буду благодарен.
Известны примеры, когда в сохранившихся первобытных племенах имеются радикальные отличия в мышлении. Где-то катастрофически малое количество слов в языке. Где-то имеются один-два названия для синего цвета, но зато десятки для оттенков зеленого. Где-то было видео (первоисточник найти не удалось), кадр из которого показан ниже. На нем туземец не может отличить синий квадратик от зеленых. При этом он здоров и не дальтоник, просто такова особенность их языка (отсутствие слов для синих цветов) и связанного с этим обучения в детстве. Можете себе представить, что на этой картинке вы не сможете отличить синий квадрат от зеленых?
Представитель народа Химби из Намибии, если интернет не врет
Также недавно была новость, что в каком-то племени туземцы не могут считать до чисел больше четырех. У них есть понятия, грубо говоря, «один», «два» и «много». Других нет. И если положить перед таким туземцем кучки из 4 и 5 палочек, он не видит между ними разницы. Так же, как мы не видим разницы между кучками из 1000 и 1001 палочек. И там, и там примерно одинаковые кучки из «много».
Другой известный пример, уже нашего исследователя середины прошлого века (ссылку на источник, опять же, найти не удалось). Который изучал особенности мышления народов, оторванных от цивилизации (не то чукчей, не то похожих малочисленных и изолированных племен, которые жили где-то среди степей). Оказалось, что они не имели некоторых очевидных для нас способов логического мышления. Например, исследователь задавал такой детский вопрос-загадку: «Белые медведи живут там, где снег. На севере снег. Какого цвета там медведи?» Туземцы не могли провести такие простейшие логические параллели. Все их ответы сводились к вариантам вроде: «Если кто-то поедет на север и посмотрит, то он сможет сказать какого цвета там медведи, а иначе никаких способов узнать это нет». Добиться другого от них не удалось. Эти исследования сильно пошатнули царившие в то время представления о разуме, так как подобные построения, которые с легкостью разгадывают наши дети, считались само собой разумеющимся свойством разума.
А сколько еще может вскрыться подобных нюансов об интеллекте, которые мы не видим, так как не знаем другой разумной жизни, кроме самих себя?
Похоже, что значительная часть того, что мы считаем разумом и интеллектом, на самом деле является результатом обучения в раннем детстве. В пользу этой теории говорят случаи обнаружения детей-маугли, выросших в лесу без общения с людьми. Большинство из которых, не смотря на развитый и физиологически идентичный нашему мозг (т.к. это современные люди, просто оказавшиеся в младенчестве в лесу), так и не сумели адаптироваться к жизни в обществе. Особенно много таких случаев почему-то в Индии, вероятно благодаря большой численности населения, нищете, и теплому климату. Некоторых не удалось научить не то что говорить, но и просто приучить пользоваться одеждой или столовой ложкой.
А значит надо обратить более пристальное внимание на то, как обучаются младенцы. И мы увидим, что они познают мир через физическое взаимодействие с ним. Потрогать, покрутить предметы в руках, и тому подобное. Даже обычный осмотр помещения, это в некотором роде анализ трехмерной обстановки, благодаря встроенному и сразу работающему бинокулярному зрению.
Более того, практически все наши знания, в том числе такая абстрактная наука как математика (являющаяся царицей наук, как известно), на самом деле сильно привязана к трехмерному представлению. Ведь как ребенок научился считать? Перед ним на столе лежали две палочки. А потом мама (или учитель) добавил к ним еще одну. И ребенок научился складывать числа.
Если хорошо подумать, то почти все наши внутренние понятия, так или иначе привязаны к окружающему трехмерному (объемному) миру. Какие-то самые сложные концепции из высшей математики конечно визуально представить нельзя или очень сложно, но зато вы видите значки, которые их обозначают. Вы знаете, что эти значки нарисованы на бумаге учебника, который можно взять в руки. Со всеми следствиями, которые их этого вытекают в физическом мире. Например, что этот учебник можно положить на полку. Или бросить об стену. Знакомое желание для многих студентов на уроках математического анализа, не так ли? Впрочем, один профессор на вопросы студентов, где это им пригодится в жизни, всегда отвечал: «Смотря что вы считаете жизнью». Ну а более простые вещи из математики легко представляются в уме, теорема Пифагора и тому подобное. Некоторые даже могут сделать это для четырехмерного куба.
И, что важнее всего, такой подход через обучение в привязке к трехмерной форме объектов устранит главную проблему сегодняшних нейросетей — непонимание контекста. Нейронная сеть, обученная воспринимать 3d мир и распознавать картинки не просто разбив их на классы, а в привязке к трехмерной форме распознаваемых объектов, никогда не спутает леопарта с диваном с леопардовой расцветкой. Потому что мы сами их отличаем именно по 3d форме, которую реконструируем из изображения. Диван имеет форму дивана, а леопард форму леопарда, какими бы цветами они ни были раскрашены. Другое дело, что сверточная нейросеть тоже могла бы отличать диван от леопарда по форме (см. выше принцип действия сверточных нейросетей). И она технически может это сделать, дайте ей для обучения 10 млн леопардов и 10 млн диванов. Ну а так ей оказалось проще ориентироваться только на пятна. Потому что распознаваемые классы не привязаны к 3d форме объектов. И это кажется ключевым моментом.
Да-да, я все понял, развяжите меня пожалуйста
Таким образом, похоже что наиболее реалистичный путь создать сильный ИИ — это дать ему возможность пройти путь младенца. Возможность манипулировать и изучать трехмерные объемные тела. Конечно, никто не будет в течении 35 5 лет учить жизни робота, как это делают люди со своими детьми. Забавно, но через пару десятков лет, возможно, будут говорить: да вы еще тогда могли это сделать, потратив всего пару-тройку лет на такое ручное обучение ИИ. А потом раскопировали бы его память и получили бы тысячи разумных роботов. Вам нужно было только верить в успех.
Но если серьезно, есть отличная возможность провести такое же обучение, но быстрее, и не в ущерб нервным клеткам матерей учителей. Обучать ИИ-ребенка в виртуальном окружении. Хоть это и навевает грустные мысли о фильме «Шоу Трумана», но это действительно может оказаться самым быстрым и надежным способом получить сильный ИИ.
Но тут возникает проблема. Человек — это существо с тонко преднастроенной нейронной сетью. Вот пример. Создали мы младенца в виртуальной реальности. И добавили ему таймер, чтобы по истечении некоторого времени он становился голодным. А что делает младенец, когда он голоден? Правильно, он кричит. Хорошо, нет проблем. Пусть над головой младенца в симуляторе появляются буквы «Аааа», обозначающие крик, как в компьютерной игре. Но сколько времени их держать над головой, как часто их показывать, и когда вообще прекратить плакать? У настоящего ребенка есть тонкая преднастройка. Он покричит и устанет. Да и сам крик не постоянный, а с перерывами. И таких нюансов очень много. Именно поэтому жестко прописанные боты в играх для нас выглядят явно неразумными, хотя по формальным признакам их зачастую можно отнести к разумным существам. Мол, собирают информацию, используют ее для достижения своих целей и так далее. Но об определении интеллекта, а точнее, об отсутствии такого определения, мы уже говорили выше. А по факту, боты в игре нам кажутся неразумными, потому что они не очень похожи на нас. А конкретно — на нашу преднастройку в нейронной сети мозга. Компьютерный персонаж непрерывно бьется об стену при сбое алгоритма навигации? Неразумный. А вот человек ударился бы пару раз (например, натолкнувшись в темноте на стену, что как бы аналог сбоя системы навигации у бота), и прекратил бы. Человек — разумный. Улавливаете разницу, да? Похоже, что разумность (т.е. похожесть в поведении на нас) во многом определяется преднастройкой нейронной сети. Хотя в обоих случаях в основе их действий — стуканий об стену, лежат примерно одинаковые ошибки расчеты поиска пути.
Конечно, это сильно упрощенный пример, потому что у человека в расчете пути принимает участие на много порядков больше понятий, чем у компьютерного бота. Человек понимает, что перед ним трехмерная стена и биться об нее головой больше двух раз (ну хорошо, уговорили, трех) нет смысла. Что опять же возвращает нас к необходимости обучать нейронную сеть ИИ в трехмерном окружении, имитирующем реальный физический мир.
Как же нам дать ИИ боту преднастройку, похожую на нашу? Можно попробовать алгоритмически описать основные инстинкты и физиологию человека. Но скорее всего мы опять столкнемся с комбинаторным взрывом, как это было при попытке вручную написать все правила для ИИ. Можно попробовать взять знания об устройстве организма на молекулярном уровне из медицины. Хотя сама медицина нуждается в сильном ИИ, который систематизировал в ней все накопленные знания.
Остается еще вариант самообучения по видеороликам. И вот тут очень пригодятся все эти достижения нейронных сетей последних лет по распознаванию изображений и звука. Преобразовать реальный мир в 3d сцену можно было уже давно, от стереокамер и аналогов камер глубины вроде kinect, и заканчивая анализом монопотока вроде LSD-SLAM (еще на первых марсоходах, кстати, использовались SLAM алгоритмы). Но для обработки имеющегося в интернете видео контента нужны нейронные сети. И тем более, для анализа что на видео происходит. А судя по последним нейросетевым достижениям, появляется робкая надежда, что это будет им по плечу. Отсюда и оптимизм в плане шансов на создание сильного ИИ в обозримом будущем.
Но неизвестно, к чему такое обучение по видероликам приведет. Делать похожее поведение может и получится. Но такой ИИ перенимет все наши слабые стороны. Потому что здравомыслящий человек имеет жесткую предустановку: «Что бы в жизни ни случилось, главное не попасть на youtube!». А иметь ИИ, обученный вести себя по роликами с ютюба, мы точно не захотим.
Нельзя сказать, что это уникальная идея. Давно уже существуют попытки реалистичного моделирования движений человека путем моделирования в виртуальном симуляторе. Начиналось все попытками создать естественную походку методами машинного обучения (генетическими алгоритмами и другими). Можно прямо сейчас на OpenAI посоревноваться в обучении виртуального человечка пробежать как можно дальше без падения.
Пока это робкие и смешные попытки, но несложно представить, что через несколько лет это перерастет в полноценный симулятор физического окружения.
А потом виртуальному младенцу добавят игрушек для игры. Потом положат перед ним две палочки, а потом добавят еще одну. И он научится считать.
Зачем козе баян
А стоит ли вообще все это таких усилий? Мы уже убедились, что вряд ли сможем создать ИИ с отличным от нашего способа мышления, со всеми его недостатками вроде иллюзий разного рода. Собственно, как уже говорилось выше, сама идея «чистого» абстрактного ИИ, хоть и очень заманчива, но весьма спекулятивна. Подтверждением тому служит хотя бы то, что попытки сделать сильный ИИ на базе книг провалились. На базе текстовых данных всего интернета — тоже (см. IBM Watson, хоторый хоть и содержит на своих дисках «весь интернет», на деле не умнее анкеты с поисковой строкой). Остался неисследованным вопрос создания ИИ на базе физического окружения, будь то в виртуальном симуляторе или в реальности. Но этот способ, скорее всего, в лучшем случае приведет к ИИ на уровне человеческого.
А нужен ли нам ИИ уровня человека? Не, не нужен. Но как уже отмечалось, имея искусственную форму разума, можно дать ей большие возможности, чем имеем мы сами в силу ограничений физиологии. Для примера, сейчас в интернете выложено более 100 млн научных работ. Из них около 30 млн по медицине. Ни одному живому человеку не под силу прочитать такой объем. А тем более, охватить все междисциплинарные знания. Даже узкие специалисты, уверен, не все работы из своей области отслеживают. А ведь в таком объеме информации наверяка скрыто множество взаимосвязей, из которых можно было бы сделать полезные выводы. Традиционные методы машинного обучения фактически потерпели фиско на этом поприще. Теперь вся надежда на сильный ИИ, который сможет освоить все эти накопленные знания человечества. Если говорим об ИИ на базе нейросети, который будет примерно равен по интеллекту человеку, то для этого он потенциально может пользоваться расширенной по сравнению с людьми памятью и более высокой тактовой частотой.
Впрочем, локомотив прогресса так и так не остановить, это лишь вопрос времени.
Об ошибках, как орфографических, так и фактических, просьба сообщать в личку или в комментариях.