Torch (học máy)

Bách khoa toàn thư mở Wikipedia
Torch
Thiết kế bởiRonan Collobert, Samy Bengio, Johnny Mariéthoz[1]
Phát hành lần đầutháng 10 năm 2002; 21 năm trước (2002-10)[1]
Phiên bản ổn định
7.0 / 27 tháng 2 năm 2017; 7 năm trước (2017-02-27)[2]
Kho mã nguồn
Viết bằngLua, LuaJIT, C, CUDAC++
Hệ điều hànhLinux, Android, Mac OS X, iOS
Thể loạiThư viện cho học máyhọc sâu
Giấy phépGiấy phép BSD
Websitetorch.ch

Torch là một thư viện học máy mã nguồn mở, một framework tính toán khoa học và là một ngôn ngữ kịch bản dựa trên ngôn ngữ lập trình Lua.[3] Nó cung cấp một lượng lớn các thuật toán về học sâu, sử dụng ngôn ngữ kịch bản LuaJIT và ngôn ngữ thực thi C được tạo ra tại IDIAPEPFL. Từ năm 2018, Torch không còn được phát triển nữa.[4] Tuy vậy, PyTorch - vốn dựa trên thư viện Torch, thì đang được phát triển từ tháng 10 năm 2022.[5]

torch[sửa | sửa mã nguồn]

Gói cốt lõi của Torch là torch. Nó cung cấp một mảng hay tensor n chiều một cách linh hoạt, hỗ trợ các quy trình cơ bản để index, chuyển vị, truyền, thay đổi kích thước, chia sẻ kho lưu trữ và tạo bản sao (cloning). Tensor cũng hỗ trợ các phép toán như max, min, sum; phân phối thống kê như phân phối đều, phân phối chuẩnphân phối đa thức; các phép toán BLAS như tích vô hướng, phép nhân ma trận với vector, phép nhân 2 ma trận.

Ví dụ sau đây sử dụng torch thông qua trình biên dịch 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

Gói torch cũng đơn giản hóa việc lập trình hướng đối tượngtuần tự hóa bằng cách cung cấp các chức năng tiện lợi khác nhau. Hàm torch.class(classname, parentclass) có thể sử dụng để tạo (lớp) factory method. Khi hàm tạo được gọi, torch khởi tạo và lập một table dạng Lua với metatable do người dùng định nghĩa qua đó table đó trở thành một đối tượng.

Các đối tượng sử dụng torch factory cũng được tuần tự hóa, miễn là chúng không chứa tham chiếu đến các đối tượng không thể tuần tự hóa, như các coroutine dạng Lua và userdata dạng Lua. Tuy nhiên, userdata có thể tuần tự hóa nếu nằm trong một kiểu table (hay metatable) cung cấp các phương thức read()write().

nn[sửa | sửa mã nguồn]

Gói nn được sử dụng để xây dựng các mạng neuron. Nó được chia thành các đối tượng module dùng chung một Module giao diện chung. Các module có phương thức forward()backward() cho phép chúng truyền thẳng (feedforward)truyền ngược (backpropagate) tương ứng. Các module có thể được nối với nhau bằng cách sử dụng module hợp tử, như Sequential, ParallelConcat để tạo các biểu đồ phức tạp phù hợp. Các module đơn giản như Linear, TanhMax tạo thành các module có các thành phần cơ bản. Giao diện module này cung cấp phép vi phân gradient tự động. Sau đây là một ví dụ về trường hợp sử dụng để xây dựng một tri giác đa lớp (MLP) bằng cách sử dụng module:

> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 input, 25 unit ẩn
> mlp:add( nn.Tanh() ) -- một số hàm truyền tiếp tuyến hyperbol
> mlp:add( nn.Linear(25, 1) ) -- 1 output
> =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]

Các hàm mất mát được thực thi như các lớp con của Criterion, có giao diện tương tự như Module. Nó cũng có phương thức forward()backward() để tính toán gradient mất mát và truyền ngược. Hữu ích để đào tạo mạng neuron đối với các yêu cầu không cao cấp. Các mất mát thường được tính qua Sai số toàn phương trung bình (MSE) thực thi trong MSECriterionentropy chéo thực thi trong ClassNLLCriterion. Dưới đây là một ví dụ về hàm Lua gọi ra để huấn luyện một module mlp khi input tensor x, tensor mục tiêu y với một biến vô hướng 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

Ngoài ra, nó cũng có lớp StochasticGradient để đào tạo một mạng neuron bằng cách sử dụng thuật Giảm gradient ngẫu nhiên, mặc dù gói optim cung cấp nhiều lựa chọn hơn, như động lượng và phân rã trọng lượng chính quy hóa.

Các gói khác[sửa | sửa mã nguồn]

Nhiều gói khác với các gói đã nêu ở trên được Torch cung cấp. Chúng được liệt kê trong cheetsheet của torch.[6] Các gói bổ sung này cung cấp một loạt các tiện ích như tính song song, đầu vào/đầu ra không đồng bộ, xử lý ảnh, v.v. Dùng LuaRocks để cài đặt, trình quản lý gói Lua cũng được bao gồm trong Torch.

Ứng dụng[sửa | sửa mã nguồn]

Torch được sử dụng bởi Nhóm nghiên cứu AI của Facebook,[7] IBM,[8] Yandex[9]Viện nghiên cứu Idiap.[10] Torch cho phép sử dụng rộng rãi trên Android[11]iOS.[12] Nó được sử dụng để tạo nên các phương pháp thực thi phần cứng cho luồng dữ liệu giống như mạng neuron.[13]

Facebook đã phát hành một bộ module mở rộng dưới dạng phần mềm mã nguồn mở.[14]

Xem thêm[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ a b “Torch: a modular machine learning software library”. 30 tháng 10 năm 2002. CiteSeerX 10.1.1.8.9850. Chú thích journal cần |journal= (trợ giúp)
  2. ^ Collobert, Ronan. “Torch7”. GitHub.
  3. ^ “Torch7: A Matlab-like Environment for Machine Learning” (PDF). Neural Information Processing Systems. 2011.
  4. ^ Torch GitHub repository ReadMe
  5. ^ PyTorch GitHub repository
  6. ^ “Cheatsheet · torch/torch7 Wiki”. GitHub.
  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” (PDF). Bản gốc (PDF) lưu trữ ngày 5 tháng 5 năm 2017. Truy cập ngày 7 tháng 12 năm 2022.
  14. ^ “Facebook Open-Sources a Trove of AI Tools”. Wired. 16 tháng 1 năm 2015.

Liên kết ngoài[sửa | sửa mã nguồn]