Torch

Torch відкрита бібліотека для машинного навчання, система для наукових обчислень та мова сценаріїв на основі мови програмування Lua[3]. Пропонує широкий спектр алгоритмів для глибинного навчання і використовує мову сценаріїв LuaJIT та реалізацію мовою C в основі. Станом на 2018 рік, Torch більше не перебуває в активній розробці.[4] Проте, станом на серпень 2019 року активно розроблюють PyTorch.[5]

Torch
Тип бібліотека для машинного та глибинного навчання
Автор(и) Ronan Collobert, Samy Bengio, Johnny Mariéthoz[1]
Перший випуск жовтень 2002 (2002-Помилка: неправильний час)[1]
Стабільний випуск 7.0 (27 лютого 2017 (2017-02-27)[2])
Репозиторій github.com/torch/torch7
Операційна система Linux, Android, Mac OS X, iOS
Мова програмування Lua, LuaJIT, C, CUDA та C++
Ліцензія ліцензія BSD
Вебсайт torch.ch

torch

Центральним пакетом Torch є torch. Він забезпечує гнучкий N-вимірний масив, або тензор, який підтримує основні процедури для індексування, розшаровування, транспозиції, приведення типів, зміни розмірів, розподілення зберігання, та клонування. Цей об'єкт використовується більшістю інших пакетів, і відтак є центральним об'єктом бібліотеки. Тензор також підтримує математичні операції, такі як max, min, sum, статистичні розподіли, такі як рівномірний, нормальний та поліноміальний, та операції основних підпрограм лінійної алгебри, такі як скалярний добуток, матрично-векторне множення, матрично-матричне множення, матрично-векторний скалярний добуток та матричний скалярний добуток.

Наступне ілюструє використання torch в REPL-інтерпретаторі:

> a = torch.randn(3,4)

> =a
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
-1.0434  2.2291  1.0525  0.8465
[torch.DoubleTensor of dimension 3x4]

> a[1][2]
-0.34010116549482
	
> a:narrow(1,1,2)
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
[torch.DoubleTensor of dimension 2x4]

> a:index(1, torch.LongTensor{1,2})
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
[torch.DoubleTensor of dimension 2x4]

> a:min()
-1.7844365427828

Пакет torch також спрощує об'єктно-орієнтоване програмування та упослідовлювання, пропонуючи різні допоміжні функції, які використовуються в його пакетах. Функцію torch.class(classname, parentclass) можливо використовувати для створення фабрик об'єктів (класів). При виклику конструктора torch ініціалізує та встановлює таблицю Lua з визначеною користувачем метатаблицею, яка робить цю таблицю об'єктом.

Об'єкти, створювані фабрикою torch, можливо також упослідовлювати, за умови, що вони не містять посилань на об'єкти, які не може бути упослідовлено, такі як співпрограми Lua та userdata Lua. Проте userdata може бути упослідовлено, якщо їх обгорнуто таблицею (або метатаблицею), яка забезпечує методи read() та write().

nn

Пакет nn застосовують для побудови нейронних мереж. Його розділено на модульні об'єкти, які мають спільний інтерфейс Module. Модулі мають методи forward() і backward(), які дозволяють їм виконувати пряме та зворотне поширення відповідно. Модулі можливо з'єднувати, застосовуючи модулеві компонувальники, такі як Sequential, Parallel і Concat, щоби створювати складні, підігнані під задачу графи. Простіші модулі, такі як Linear, Tanh і Max, складають модулі основних складових. Цей модульний інтерфейс забезпечує автоматичне диференціювання градієнтів першого порядку. Нижче наведено приклад побудови багатошарового перцептрону із застосуванням модулів:

> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 входових, 25 прихованих вузлів
> mlp:add( nn.Tanh() ) -- якась передавальна функція у вигляді гіперболічного тангенсу
> mlp:add( nn.Linear(25, 1) ) -- 1 вихід
> =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]

Функції втрат реалізовано як підкласи класу Criterion, що має інтерфейс, подібний до Module. Він також має методи forward() і backward() для обчислення втрат і зворотного поширення градієнтів відповідно. Критерії є корисними для тренування нейронної мережі на класичних задачах. Уживаними критеріями є критерій середньоквадратичної похибки, реалізований в MSECriterion, та перехресно-ентропійний критерій, реалізований в ClassNLLCriterion. Нижче наведено приклад функції Lua, яку можливо викликати ітеративно для тренування модуля mlp на входовому тензорі x і цільовому тензорі y зі скалярним темпом навчання learningRate:

function gradUpdate(mlp,x,y,learningRate)
  local criterion = nn.ClassNLLCriterion()
  pred = mlp:forward(x)
  local err = criterion:forward(pred, y); 
  mlp:zeroGradParameters();
  local t = criterion:backward(pred, y);
  mlp:backward(x, t);
  mlp:updateParameters(learningRate);
end

Він також має клас StochasticGradient для тренування нейронної мережі методом стохастичного градієнту, хоча пакет optim забезпечує набагато більше можливостей в цьому відношенні, таких як регуляризація зникання моменту та градієнту.

Інші пакети

З Torch використовують багато інших пакетів, крім зазначених вище офіційних. Їх перелічено в шпаргалці torch.[6] Ці додаткові пакети забезпечують широкий спектр зручностей, таких як паралелізм, асинхронне введення/виведення, обробка зображень тощо. Їх можливо встановлювати за допомогою LuaRocks, пакетного менеджера Lua, який також включено до дистрибутиву Torch.

Застосування

Torch використовують Група дослідження ШІ компанії Facebook,[7] IBM,[8] Яндекс[9] і Дослідницький інститут Ідіап.[10] Torch було розширено для використання під Android[11] та iOS.[12] Його використовували для побудови апаратних реалізацій потоків даних, подібних тим, що в нейронних мережах.[13]

Facebook випустила набір модулів розширення як відкрите програмне забезпечення.[14]

Див. також

Примітки

  1. Torch: a modular machine learning software library. 30 жовтня 2002 р. Процитовано 24 квітня 2014 р.. (англ.)
  2. Collobert, Ronan. Torch7. GitHub. (англ.)
  3. Torch7: A Matlab-like Environment for Machine Learning. Neural Information Processing Systems. 2011. (англ.)
  4. Torch GitHub repository ReadMe (англ.)
  5. PyTorch GitHub repository (англ.)
  6. Cheatsheet · torch/torch7 Wiki. (англ.)
  7. KDnuggets Interview with Yann LeCun, Deep Learning Expert, Director of Facebook AI Lab (англ.)
  8. Hacker News (англ.)
  9. Yann Lecun's Facebook Page (англ.)
  10. IDIAP Research Institute : Torch (англ.)
  11. Torch-android GitHub repository (англ.)
  12. Torch-ios GitHub repository (англ.)
  13. NeuFlow: A Runtime Reconfigurable Dataflow Processor for Vision Архівовано 5 травня 2017 у Wayback Machine. (англ.)
  14. Facebook Open-Sources a Trove of AI Tools. Wired. 16 січня 2015. (англ.)

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.