2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 12:19 
Аватара пользователя


01/12/11

8634
Хотелось назвать эту тему чуть иначе:
"Насколько хорошо нужно уметь программировать, чтобы написать простейшую нейросеть?"
Только вот такое длинное название не поместилось в заголовок.

Я понемногу начинаю практиковаться в программировании, хотя долгие годы меня сдерживал страх. Зато теперь сразу всё стало интересно (как в анекдоте про "выпусти кошку!") - от веб-дизайна до Искусственного Интеллекта. В наше время в моду вошли нейросети, а ещё какие-то капсульные сети, которые, как мне объяснили, по сути те же нейросети, только более хитро устроенные.

А теперь собственно вопрос. Что требуется от начинающего программиста, желающего написать простейшую нейросеть? Какие знания и навыки ему понадобятся? Сколько примерно времени на это уйдёт? И сколько sloc, приблизительно? И вообще, хотелось бы сперва увидеть собственными глазами, как должен выглядеть код простейшей нейросети (и на каком языке его, кстати, лучше писать?), а уж после этого попробовать написать что-нибудь похожее самостоятельно.

Заранее благодарю за любую поддержку (кроме финансовой), включая психологическую.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 12:29 


07/08/14
4231
Тут (на начальных этапах) скорее не программировать надо уметь, а понимать что есть такое - нейросеть и как она работать должна. Программирование всеж - инструмент, вроде знания какого-нибудь иностранного языка. Это потом, когда для Вас станут критичными объемы памяти, скорость работы алгоритмов и т.п., уже надо уметь программировать. А в самом начале туже сортировку вполне можно делать перебором форнекстом, а те же массивы объявлять просто побольше размером и всё.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 12:42 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Ktina в сообщении #1324569 писал(а):
как должен выглядеть код простейшей нейросети
Выглядит элементарно:
Используется синтаксис Objective-C
func detect() {
   
    guard let personciImage = CIImage(image: personPic.image!) else {
        return
    }

    let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
    let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
    let faces = faceDetector.featuresInImage(personciImage) // здесь распознаем лица на фото
   
    for face in faces as! [CIFaceFeature] {
        // здесь проходим по списку найденных лиц
        }
    }
}
(Взято отсюда: https://habr.com/post/309802/)

:mrgreen:

Но, если вы не хотите, как на той картинке, "рандомно подставлять коэффициенты, пока кросс-валидация не даст приемлемый результат", дело немного усложняется. У меня жена год назад увлеклась этой темой, год слушала всякие лекции на курсере и ютубе, вот теперь какие-то простенькие модельки начала запускать на рабочей БД...

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 12:47 
Заслуженный участник


26/05/14
981
Чтобы написать ИИ нужно уметь программировать плохо. Другими словами, не нужно уметь программировать хорошо, чтобы написать ИИ.
Кратчайший путь такой - освоить подходящий язык программирования (Python например), понять какую задачу вы хотели бы решить, найти библиотеку для решения этого типа задач, построить сеть (используя найденную библиотеку и Python), подготовить данные для обучения, обучить сеть, воспользоваться результатом. Программирование тут занимает малую долю общих усилий. Важнее получить общее представление о задаче и инструментах для её решения.
Есть русскоязычное сообщество по машинному обучению: OpenDataScience. Там можно задавать вопросы и вам ответят.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 18:37 


20/09/09
2039
Уфа
Я вот сейчас начал заниматься изучением Питона, хочу спросить у уважаемого сообщества: какая IDE для Python лучше подходит для учебной работы на домашнем компьютере с Windows 10 (процессор Core i7, 32 Гб ОЗУ) с нейронными сетями, с видеокартой CUDA? Можно ли работать с CUDA из MS Visual Studio? Вроде бы Visual Studio достаточно дружелюбная среда для начинающего разработчика? Или с ней все-таки лучше не заморачиваться? На tproger.ru приведены несколько IDE для сравнения.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 18:57 


10/04/12
705
Rasool в сообщении #1324697 писал(а):
Я вот сейчас начал заниматься изучением Питона, хочу спросить у уважаемого сообщества: какая IDE для Python лучше подходит для учебной работы на домашнем компьютере с Windows 10 (процессор Core i7, 32 Гб ОЗУ) с нейронными сетями, с видеокартой CUDA?


Во-первых, создатель библиотеки Keras в своей книге «Глубокое обучение на Python» прямым текстом пишет от установке UNIX-like системы. Хотя Windows и поддерживается, но больше по остаточному принципу. Большинство разработчиков работают в UNIX, так что именно UNIX-like OS проходят больше тестирования, и проблемы для них олавливаются и исправляются быстрее, комьюнити больше. А под Windows есть вариант наткнутся на какую-нить техническую проблему, которую невозможно решить. И никто не подскажет.

Во-вторых, сложность программы на Python для ИИ обычно не запределельная, поэтому большой необходимости именно в IDE не возникает. Лично я в качестве IDE для всех языков программирования использую vim (в том числе для таких больших как Linux Kernel), и он справляется на ура. Но вряд ли это можно рекомендовать для Windows пользователя. Думаю, лучше попробовать PyCharm.

Ещё для учебной работы можно арендовать сервера Google Cloud или Amazon, там Linux.

-- 05.07.2018, 18:05 --

Ktina в сообщении #1324569 писал(а):
Хотелось назвать эту тему чуть иначе:
"Насколько хорошо нужно уметь программировать, чтобы написать простейшую нейросеть?"


Вот я привёл пример простейшего кода, который строит нейросеть, обучает и тестирует. Разберётесь? По крайней мере на этапе обучения ничего фантастического применять из программерских скиллов не нужно.

код: [ скачать ] [ спрятать ]
Используется синтаксис Python
#!/usr/bin/env python3

from keras.datasets import mnist
from keras.utils import to_categorical

(train_images, train_labels), (test_images, test_lables) = mnist.load_data()

train_images = train_images.reshape((60000, 28*28))
train_images = train_images.astype('float32') / 255

test_images = test_images.reshape((10000, 28*28))
test_images = test_images.astype('float32') / 255

train_labels = to_categorical(train_labels)
test_lables = to_categorical(test_lables)



from keras import models
from keras import layers

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))

network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

network.fit(train_images, train_labels, epochs=5, batch_size=128)

test_loss, test_acc = network.evaluate(test_images, test_lables)
print('test_acc:', test_acc)
 

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 19:07 


20/09/09
2039
Уфа
Ktina в сообщении #1324569 писал(а):
Хотелось назвать эту тему чуть иначе:
А теперь собственно вопрос. Что требуется от начинающего программиста, желающего написать простейшую нейросеть? Какие знания и навыки ему понадобятся? Сколько примерно времени на это уйдёт? И сколько sloc, приблизительно? И вообще, хотелось бы сперва увидеть собственными глазами, как должен выглядеть код простейшей нейросети (и на каком языке его, кстати, лучше писать?), а уж после этого попробовать написать что-нибудь похожее самостоятельно.

На tproger.ru выложили следующую статью: Искусственный интеллект: как и где изучать — отвечают эксперты. В основном российские эксперты.

-- Чт июл 05, 2018 22:16:37 --

Видимо, если перед специалистом по ИИ из российского областного центра встанет вопрос о работе с ИИ в индустрии, а не только в науке, то нужно решать вопрос о переезде в такие центры, как Москва или Питер.

-- Чт июл 05, 2018 22:13:26 --

mustitz в сообщении #1324701 писал(а):
Rasool в сообщении #1324697 писал(а):
Я вот сейчас начал заниматься изучением Питона, хочу спросить у уважаемого сообщества: какая IDE для Python лучше подходит для учебной работы на домашнем компьютере с Windows 10 (процессор Core i7, 32 Гб ОЗУ) с нейронными сетями, с видеокартой CUDA?


Во-первых, создатель библиотеки Keras в своей книге «Глубокое обучение на Python» прямым текстом пишет от установке UNIX-like системы. Хотя Windows и поддерживается, но больше по остаточному принципу. Большинство разработчиков работают в UNIX, так что именно UNIX-like OS проходят больше тестирования, и проблемы для них олавливаются и исправляются быстрее, комьюнити больше. А под Windows есть вариант наткнутся на какую-нить техническую проблему, которую невозможно решить. И никто не подскажет.

Во-вторых, сложность программы на Python для ИИ обычно не запределельная, поэтому большой необходимости именно в IDE не возникает. Лично я в качестве IDE для всех языков программирования использую vim (в том числе для таких больших как Linux Kernel), и он справляется на ура. Но вряд ли это можно рекомендовать для Windows пользователя. Думаю, лучше попробовать PyCharm.

Ещё для учебной работы можно арендовать сервера Google Cloud или Amazon, там Linux.

Что же делать бедному виндузятнику на своем домашнем компе? Запускать Linux на виртуальной машине? Или есть какой-то способ установить Linux второй ОС на машине с Windows 10?

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 19:35 


10/04/12
705
Rasool в сообщении #1324706 писал(а):
Что же делать бедному виндузятнику на своем домашнем компе? Запускать Linux на виртуальной машине? Или есть какой-то способ установить Linux второй ОС на машине с Windows 10?

Ну... если запускать Linux на виртуальной машине, то не будет доступа к GPU. Лучше поставить второй операционкой, благо дело не хитрое. Надо только выделить под него раздел на диске (или купить новый). Linux поверх Windows ставится относительно беспроблемно. Windows на Linux требует потом некоторой донастройки (загрузится в флешки в Linux и перегенерить MBR).

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение05.07.2018, 22:09 


20/09/09
2039
Уфа
mustitz в сообщении #1324714 писал(а):
Rasool в сообщении #1324706 писал(а):
Что же делать бедному виндузятнику на своем домашнем компе? Запускать Linux на виртуальной машине? Или есть какой-то способ установить Linux второй ОС на машине с Windows 10?

Ну... если запускать Linux на виртуальной машине, то не будет доступа к GPU. Лучше поставить второй операционкой, благо дело не хитрое. Надо только выделить под него раздел на диске (или купить новый). Linux поверх Windows ставится относительно беспроблемно. Windows на Linux требует потом некоторой донастройки (загрузится в флешки в Linux и перегенерить MBR).

Какую версию Linux посоветуете начинающему Питон-программисту?

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 00:19 
Аватара пользователя


01/12/11

8634
mustitz в сообщении #1324701 писал(а):

Вот я привёл пример простейшего кода, который строит нейросеть, обучает и тестирует. Разберётесь?

Честно? Пока что в голове путаются JavaSquirt, JavaScript и Python...

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 06:40 


10/03/16
4444
Aeroport
mustitz в сообщении #1324701 писал(а):
Вот я привёл пример простейшего кода, который строит нейросеть, обучает и тестирует.


То что вы привели на Питоне до вас привёл rockclimber на неком тарабарском языке (let какой-то...). Правда rockclimber пошутил, а вы похоже всерьёз советуете скопировать и запустить.

Ktina

Код на Питоне, о котором я веду речь — это просто последовательность вызовов модулей, т.е. это просто интерфейс: как варится кофе? Нажимается одна кнопка на панели кофемашины, всё. Правда просто, да? Вот так же и тут: касаться приведённого кода даже трёхметровой палкой можно только когда будете иметь представление о том, что происходит в отдельных вызываемых там функциях. Иными словами, этим кодом нужно не начинать, а заканчивать поверхностное знакомство с сабжем, иначе есть риск стать code monkey.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 08:13 
Аватара пользователя


07/01/13
261
NJ
Вот тут очень-очень просто, что такое нейросеть - https://habr.com/post/416071/ , вполне достаточно информации, чтобы понять смысл и построить свою простейшую сеть на "одном нейроне" без специализированных фреймворков.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 12:47 


10/04/12
705
ozheredov в сообщении #1324781 писал(а):
mustitz в сообщении #1324701 писал(а):
Вот я привёл пример простейшего кода, который строит нейросеть, обучает и тестирует.

То что вы привели на Питоне до вас привёл rockclimber на неком тарабарском языке (let какой-то...). Правда rockclimber пошутил, а вы похоже всерьёз советуете скопировать и запустить.


У rockclimber просто шутка, а у меня вполне рабочий пример, который можно запустить:

код: [ скачать ] [ спрятать ]
Используется синтаксис Bash
$ ./demo.py
Using TensorFlow backend.
Epoch 1/5
2018-07-06 09:44:01.316923: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA
60000/60000 [==============================] - 7s 109us/step - loss: 0.2641 - acc: 0.9236
Epoch 2/5
60000/60000 [==============================] - 7s 114us/step - loss: 0.1052 - acc: 0.9689
Epoch 3/5
60000/60000 [==============================] - 7s 121us/step - loss: 0.0687 - acc: 0.9799
Epoch 4/5
60000/60000 [==============================] - 7s 115us/step - loss: 0.0499 - acc: 0.9852
Epoch 5/5
60000/60000 [==============================] - 7s 116us/step - loss: 0.0372 - acc: 0.9892
10000/10000 [==============================] - 1s 56us/step
test_acc: 0.9786
 


Можем разобрать по строкам, как это работает.

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 13:35 


10/03/16
4444
Aeroport
Corund в сообщении #1324786 писал(а):
Вот тут очень-очень просто, что такое нейросеть


Вот это то что нужно для ТСа

-- 06.07.2018, 13:37 --

mustitz в сообщении #1324827 писал(а):
Можем разобрать по строкам, как это работает.


Давайте попробуем строку с network.fit (все что выше тривиально). Я весь внимание

-- 06.07.2018, 13:44 --

Ktina в сообщении #1324569 писал(а):
Только вот такое длинное название не поместилось в заголовок


Для общего кругозора: стандартное обозначение нейросети ANN — artificial neural network, или же просто NN. То есть нейросеть, NN — это ваш ИИ, увиденный в зеркале ))

 Профиль  
                  
 
 Re: Как хорошо нужно уметь программировать, чтобы написать ИИ?
Сообщение06.07.2018, 14:28 


10/04/12
705
ozheredov в сообщении #1324836 писал(а):
Corund в сообщении #1324786 писал(а):
Вот тут очень-очень просто, что такое нейросеть

Давайте попробуем строку с network.fit (все что выше тривиально). Я весь внимание


Используется синтаксис Python
network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
network.fit(train_images, train_labels, epochs=5, batch_size=128)
 


Прекрасно, вот ссылка на документацию по функции compile и fit.

Итак, у нас есть нейросеть, которая состоит из большого числа параметров. Нам надо её обучить, т. е. найти хороший набор этих параметров. Метод compile позволяет сконфигурировать метод, который будет использован для поиска этого набора. Априори есть много информации о том, какие методы себя хорошо проявили при решении той или иной задачи. Поэтому можно настроить их. Одним из таким методов является RMSprop. На начальном уровне делати выбора оптимизатора можно пока опустить, поигравшись с готовыми сетями набить руку с Python и тогда немного копать вглубь. Пока что достаточно знать, что RMSprop хороший универсальный метод. Далее, loss это используемая функция потерь, она обычно зависит от типа решаемой задачи. И для категоризации рекомендуется именно она. Массив metrics это просто массив метрик, которые будут вычисляться при обучении модели. Обычный выбор использовать accuracy (процент данных из обучаемого набора, для которых нейросеть точно определила категорию).

fit, собственно говоря, это запуск обучения. В этот метод мы передаём изображения, на которых будет тренирвоаться наша сеть, а также истинные значения категорий для этих изображений. Также мы передаём batch_size=128, что означает, что одновременно будет считаться потери для 128 изображений, по ним будет построет градиент, по которому мы будем двигаться в сторону уменьшения потерь. Значение 128 тут скорее компромисс между качеством и скоростью, больший размер пакета даёт лучше качество но увеличивает время расчёта. Как только порции по 128 изображений закончатся в тренировочном наборе, закончится эпоха (итерация) обучения. Таких эпох надо сделать пять (epochs=5).

Вкратце как-то так.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group