Tại sao chúng ta cần phao để sử dụng mạng thần kinh?


8

Có thể tạo một mạng thần kinh chỉ sử dụng các số nguyên bằng cách chia tỷ lệ đầu vào và đầu ra của từng chức năng thành [-INT_MAX, INT_MAX] không? Có bất kỳ nhược điểm?

Câu trả lời:


4

TL; DR

Không chỉ có thể, nó thậm chí còn được thực hiện và có sẵn trên thị trường . Nó không thực tế trên một CTNH hàng hóa, khá tốt về số học FP.

Chi tiết

Điều này là hoàn toàn có thể, và bạn có thể nhận được một số tốc độ cho rất nhiều rắc rối.

Điều tuyệt vời về điểm nổi là nó hoạt động mà bạn không biết phạm vi chính xác. Bạn có thể chia tỷ lệ đầu vào của mình thành phạm vi (-1, +1)(tỷ lệ như vậy là khá phổ biến vì nó tăng tốc độ hội tụ) và nhân chúng với nhau 2**31, vì vậy họ đã sử dụng phạm vi số nguyên 32 bit đã ký. Tốt rồi.

Bạn không thể làm tương tự với trọng lượng của mình vì không có giới hạn đối với chúng. Bạn có thể giả sử chúng nằm trong khoảng (-128, +128)và chia tỷ lệ cho phù hợp.

Nếu giả định của bạn là sai, bạn sẽ bị tràn và trọng lượng âm rất lớn trong đó trọng lượng dương rất lớn phải theo cách khác. Trong mọi trường hợp, một thảm họa.

Bạn có thể kiểm tra tràn, nhưng cái này quá đắt. Số học của bạn trở nên chậm hơn so với FP.

Thỉnh thoảng bạn có thể kiểm tra sự cố tràn có thể và thực hiện hành động khắc phục. Các chi tiết có thể trở nên phức tạp.

Bạn có thể sử dụng số học bão hòa , nhưng nó chỉ được triển khai trong một số CPU chuyên dụng, không phải trong PC của bạn.

Bây giờ, có một phép nhân. Với việc sử dụng các số nguyên 64 bit, nó hoạt động tốt, nhưng bạn cần tính toán một tổng (với khả năng tràn) và thu nhỏ đầu ra trở lại cùng một phạm vi lành mạnh (một vấn đề khác).

Nói chung, với số học FP nhanh có sẵn, nó không đáng để bận tâm.

Nó có thể là một ý tưởng tốt cho một chip tùy chỉnh, có thể thực hiện số học số nguyên bão hòa với phần cứng ít hơn nhiều và nhanh hơn nhiều so với FP.


Tùy thuộc vào loại số nguyên bạn sử dụng, có thể có một mất chính xác khi so sánh với điểm nổi, có thể có hoặc không quan trọng. Lưu ý rằng TPU (được sử dụng trong AlphaZero) chỉ có độ chính xác 8 bit.


2

Một số người có thể tranh luận chúng ta có thể sử dụng intthay vì floattrong NN như floatcó thể dễ dàng được biểu diễn như một int / knơi klà một yếu tố nói nhân 10 ^ 9ví dụ như 0,00005 có thể được chuyển đổi sang 50000 bằng cách nhân với 10 ^ 9 ..

Từ quan điểm lý thuyết thuần túy : Điều này là hoàn toàn có thể, nhưng nó sẽ dẫn đến việc mất độ chính xác do intrơi vào INTEGERtập hợp số trong khi floatsrơi vào REAL NUMBERtập hợp. Chuyển đổi số thực thành int 'sẽ dẫn đến mất độ chính xác cao nếu bạn đang sử dụng các tỷ lệ rất cao, vd float64. Các số thực có vô số không thể đếm được, trong khi các số nguyên có vô số có thể đếm được và có một đối số nổi tiếng được gọi là đối số đường chéo của Cantor chứng minh điều này. Dưới đây là một minh họa đẹp của cùng. Sau khi hiểu được sự khác biệt, bạn sẽ hiểu được một cách trực giác tại sao việc chuyển đổi int thành float là không thể thực hiện được.

Từ quan điểm thực tế: Chức năng kích hoạt được biết đến nhiều nhất là kích hoạt sigmoid (tanh cũng rất giống nhau). Thuộc tính chính của các hoạt động này là chúng ép các số ở giữa 0 and 1hoặc -1 and 1. Nếu bạn chuyển đổi dấu phẩy động thành một số nguyên bằng cách nhân với một thừa số lớn, điều này sẽ dẫn đến một số lượng lớn hầu như luôn luôn và chuyển nó sang bất kỳ hàm nào như vậy, kết quả đầu ra sẽ luôn luôn là một trong hai cực trị (nghĩa là 1 or 0).

Đến với các thuật toán, các thuật toán tương tự như backpropagation với động lượng không thể chạy trên int. Điều này là do, vì bạn sẽ nhân tỷ lệ intthành một số lớn và thuật toán động lượng thường sử dụng một số loại momentum_factor^ncông thức, trong đó nsố lượng ví dụ đã lặp lại, bạn có thể tưởng tượng kết quả nếu momentum_factor = 100 and n = 10.

Chỉ có thể nơi quy mô có thể làm việc là để relukích hoạt. vấn đề với cách tiếp cận này sẽ là nếu dữ liệu có thể sẽ không phù hợp lắm trong mô hình này, sẽ có lỗi tương đối cao.

Cuối cùng: Tất cả các NN làm là gần đúng một real valuedchức năng. Bạn có thể cố gắng phóng to hàm này bằng cách nhân nó với một thừa số, nhưng bất cứ khi nào bạn chuyển từ, hàm có giá trị thực sang số nguyên, về cơ bản bạn biểu diễn hàm dưới dạng một chuỗi steps. Một cái gì đó như thế này xảy ra (Chỉ hình ảnh cho mục đích đại diện): nhập mô tả hình ảnh ở đây

Bạn có thể thấy rõ vấn đề ở đây, mỗi số nhị phân đại diện cho một bước, để có độ chính xác cao hơn, bạn phải tăng các bước nhị phân trong một độ dài nhất định, trong vấn đề của bạn sẽ chuyển thành có giới hạn rất cao [-INT_MAX, INT_MAX] .


2
+1 cho tham chiếu Đường chéo của Cantor
Andrew Butler

1
@AndrewButler -1 vì lý do rất giống nhau. Đó là một bằng chứng thú vị, nhưng hoàn toàn không liên quan gì đến số học máy tính (chỉ liên quan đến các tập hữu hạn, ngay cả trong trường hợp của FP).
maaartinus

Lưu ý rằng số dấu phẩy động sử dụng một số bit cho số mũ, có nghĩa là, ví dụ, 32 bit floatkém chính xác hơn 32 bit int(lỗi lượng tử hóa trong hình ảnh của bạn lớn hơn 256 lần đối với float). Vấn đề duy nhất với nhân rộng là, đối với nhiều kết quả trung gian, không có thang đo tốt. Vì vậy, bạn có thể lãng phí bit hoặc rủi ro tràn (hoàn toàn làm hỏng việc học) hoặc ngăn chặn hoặc kiểm tra tràn (mất quá nhiều thời gian).
maaartinus

@maaartinus mặc dù người dùng đã đề cập đến 'float', tôi cho rằng đó là số thực vì không có đề cập đến nó ở bất kỳ đâu trong câu hỏi, hình ảnh chỉ dành cho mục đích đại diện và nếu một người vượt ra ngoài float64 thì không có phần cứng thập phân và không có phần cứng những hạn chế ngăn cản chúng tôi đạt được sự đề cao, nó chỉ là vô nghĩa nên không được theo đuổi
DuttaA

@DuttaA Quan điểm của tôi là chúng ta chỉ có thể làm việc với xấp xỉ một số thực, và đó là tất cả những gì chúng ta cần. Thông thường, một vài bit chính xác là đủ, TPU của Google chỉ có 8 bit và là số nguyên. Vì vậy, bạn có thể sử dụng độ chính xác tùy ý, nhưng thiếu hỗ trợ CTNH cho bất cứ thứ gì ngoài gấp đôi (80 bit), nó sẽ chậm hơn nhiều. Và bạn có thể sử dụng số nguyên dài tùy ý, nếu bạn muốn, quá. +++Đối với tôi, hình ảnh dường như gợi ý một lỗi cụ thể đối với việc sử dụng số nguyên gây hiểu lầm. +++Tôi không hiểu bạn tranh luận về gradient_history^n. Đối phó 100**10là sai.
maaartinus

2

Phần cứng dấu phẩy động

Có ba định dạng dấu phẩy động phổ biến được sử dụng để xấp xỉ các số thực được sử dụng trong mạch số học kỹ thuật số. Những điều này được định nghĩa trong IEEE 754, một tiêu chuẩn được áp dụng vào năm 1985 với bản sửa đổi vào năm 2008. Những ánh xạ của các biểu diễn số thực theo bố cục bit được thiết kế thành CPU, FPU, DSP và GPU trong phần cứng, phần sụn hoặc thư viện 1 .

  • nhị phân 32 có mantissa 24 bit và số mũ 8 bit
  • nhị phân 64 có mantissa 53 bit và số mũ 11 bit
  • nhị phân 128 có mantissa 113 bit và số mũ 15 bit 2

Các yếu tố trong việc lựa chọn đại diện số

Bất kỳ trong số này có thể đại diện cho các tín hiệu trong xử lý tín hiệu và tất cả đã được thử nghiệm trong AI cho các mục đích khác nhau liên quan đến ba điều:

  • Phạm vi giá trị - không phải là mối quan tâm trong các ứng dụng ML khi tín hiệu được chuẩn hóa đúng
  • Đảo ngược độ bão hòa của tín hiệu với nhiễu tròn - một vấn đề quan trọng trong điều chỉnh tham số
  • Thời gian cần thiết để thực hiện một thuật toán trên kiến ​​trúc đích đã cho

Sự cân bằng trong AI được thiết kế tốt nhất là giữa hai mục cuối cùng này. Trong trường hợp lan truyền ngược trong mạng lưới thần kinh, tín hiệu dựa trên độ dốc gần đúng với hành động khắc phục mong muốn để áp dụng cho các tham số suy giảm của mỗi lớp không được trở nên bão hòa với nhiễu tròn. 3

Xu hướng phần cứng Ưu đãi Điểm nổi

Do nhu cầu của một số thị trường nhất định và sử dụng chung, các phép toán vô hướng, vectơ hoặc ma trận sử dụng các tiêu chuẩn này, trong một số trường hợp nhất định, có thể nhanh hơn số học số nguyên. Những thị trường này bao gồm ...

  • Kiểm soát vòng kín (thí điểm, nhắm mục tiêu, biện pháp đối phó)
  • Phá mã (Fourier, hữu hạn, hội tụ, fractal)
  • Kết xuất video (xem phim, hoạt hình, chơi game, VR)
  • Điện toán khoa học (vật lý hạt, astrodynamics)

Cấp độ đầu tiên chuyển đổi sang số nguyên

Ở đầu đối diện của phạm vi số, người ta có thể biểu thị các tín hiệu dưới dạng số nguyên (đã ký) hoặc số nguyên không âm (không dấu).

Trong trường hợp này, phép biến đổi giữa tập hợp các số thực, vectơ, ma trận, khối và siêu khối trong thế giới của phép tính 4 và các số nguyên gần đúng chúng là một đa thức bậc nhất.

Đa thức có thể được biểu diễn dưới dạng n= =r(mộtS+b), Ở đâu một0, n là xấp xỉ số nhị phân, S là vô hướng thực, và rlà hàm làm tròn số thực thành số nguyên gần nhất. Điều này định nghĩa một siêu tập hợp của khái niệm số học điểm cố định vìb.

Tính toán dựa trên số nguyên cũng đã được kiểm tra bằng thực nghiệm cho nhiều ứng dụng AI. Điều này cho nhiều lựa chọn hơn:

  • số nguyên 16 bit bổ sung của hai
  • Số nguyên không âm 16 bit
  • hai số nguyên 32 bit bổ sung
  • Số nguyên không âm 32 bit
  • số nguyên 64 bit bổ sung của hai
  • Số nguyên không âm 64 bit
  • hai số nguyên 128 bit bổ sung
  • Số nguyên không âm 128 bit

Ví dụ trường hợp

Chẳng hạn, nếu lý thuyết của bạn chỉ ra sự cần thiết phải biểu diễn các số thực trong phạm vi [-π,π] trong một số thuật toán, sau đó bạn có thể biểu thị phạm vi này dưới dạng số nguyên không âm 64 bit (nếu điều đó có lợi cho tối ưu hóa tốc độ vì một số lý do là thuật toán và có thể là phần cứng cụ thể).

Bạn có biết rằng [-π,π] ở dạng đóng (quan hệ đại số) được phát triển từ phép tính cần được biểu diễn trong phạm vi [0,264-1], vì vậy trong n= =r(mộtS+b), một= =261b= =260. Lựa chọnmột= =264π có thể sẽ tạo ra nhu cầu cho các chu kỳ bị mất nhiều hơn trong phép nhân khi một thao tác đơn giản của số mũ hai cơ sở hiệu quả hơn nhiều.

Phạm vi của các giá trị cho số thực đó sẽ là [0, 1100,1001,0000,1111,1101,1010,1010,0010,0010,0001,0110,1000,1100,0010,0011,0101] và số bit bị lãng phí bằng cách giữ mối quan hệ dựa trên sức mạnh của hai sẽ đăng nhập24-tôiog2π, đó là khoảng 0,3485 bit. Điều đó tốt hơn 99% bảo tồn thông tin.

Quay lại câu hỏi

Câu hỏi là một câu hỏi hay, và phụ thuộc vào phần cứng và tên miền.

Như đã đề cập ở trên, phần cứng đang tiếp tục phát triển theo hướng hoạt động với số học ma trận và số học ma trận của IEEE, đặc biệt là trong phép nhân dấu phẩy động 32 và 64 bit. Đối với một số miền và mục tiêu thực hiện (phần cứng, kiến ​​trúc bus, phần sụn và kernel), số học dấu phẩy động có thể thực hiện tổng thể những gì đạt được hiệu suất có thể đạt được trong CPU thế kỷ 20 bằng cách áp dụng phép biến đổi đa thức bậc nhất ở trên.

Tại sao câu hỏi có liên quan

Trong hợp đồng, nếu giá sản xuất sản phẩm, mức tiêu thụ điện năng, kích thước và trọng lượng của bo mạch PC phải được giữ ở mức thấp để vào một số thị trường tiêu dùng, hàng không và công nghiệp nhất định, CPU có thể được yêu cầu. Theo thiết kế, các kiến ​​trúc CPU nhỏ hơn này không có DSP và các khả năng của FPU thường không có phần cứng thực hiện phép nhân dấu phẩy động 64 bit. 5

Xử lý dãy số

Cẩn thận trong việc chuẩn hóa tín hiệu và chọn các giá trị phù hợp cho ab là điều cần thiết, như đã đề cập, hơn là với dấu phẩy động, trong đó việc giảm số mũ có thể loại bỏ nhiều trường hợp trong đó bão hòa sẽ là vấn đề với số nguyên 6 . Tất nhiên, sự gia tăng của số mũ có thể ngăn chặn tràn tự động, đến một điểm, tất nhiên.

Trong cả hai loại biểu diễn số, chuẩn hóa là một phần của những gì cải thiện tốc độ hội tụ và độ tin cậy dù sao, vì vậy nó phải luôn được giải quyết.

Cách duy nhất để đối phó với độ bão hòa trong các ứng dụng yêu cầu tín hiệu nhỏ (chẳng hạn như giảm độ dốc trong lan truyền ngược, đặc biệt là khi phạm vi tập dữ liệu vượt quá thứ tự cường độ) là cẩn thận tìm ra toán học để tránh nó.

Đây là một môn khoa học và chỉ một số ít người có phạm vi kiến ​​thức để xử lý thao tác phần cứng ở cấp độ mạch và ngôn ngữ lắp ráp cùng với đại số tuyến tính, tính toán và hiểu máy học. Bộ kỹ năng liên ngành là rất hiếm và có giá trị.


Ghi chú

[1] Các thư viện cho các hoạt động phần cứng cấp thấp như nhân 128 bit được viết bằng ngôn ngữ lắp ráp chéo hoặc bằng C với tùy chọn -S được bật để nhà phát triển có thể kiểm tra hướng dẫn của máy.

[2] Trừ khi bạn đang tính toán số lượng nguyên tử trong vũ trụ, số lượng hoán vị trong trò chơi có thể có cho trò chơi Đi, khóa học đến một bãi đáp trong miệng núi lửa trên Sao Hỏa hoặc khoảng cách tính bằng mét để đạt được khả năng hành tinh có thể ở được xoay quanh Proxima Centauri, bạn có thể sẽ không cần các biểu diễn lớn hơn ba biểu diễn điểm nổi phổ biến của IEEE.

[3] Nhiễu tròn làm phát sinh một cách tự nhiên khi tín hiệu số gần bằng 0 và làm tròn bit có ý nghĩa nhỏ nhất trong biểu diễn kỹ thuật số bắt đầu tạo ra nhiễu hỗn loạn có cường độ gần với tín hiệu. Khi điều này xảy ra, tín hiệu bão hòa trong nhiễu đó và không thể được sử dụng để truyền tín hiệu một cách đáng tin cậy.

[4] Các dạng đóng (công thức đại số) được hiện thực hóa trong các thuật toán điều khiển bằng phần mềm phát sinh từ giải pháp của phương trình, thường liên quan đến các vi phân.

[5] Các bảng con gái với GPU thường có giá quá cao, đói năng lượng, nóng, nặng và / hoặc đóng gói không thân thiện ở các thị trường phi mặt đất và tiêu dùng.

[6] Không có phản hồi nào bị bỏ qua trong câu trả lời này vì nó chỉ ra một trong hai điều sau: (A) Sự hội tụ hoàn hảo hoặc (B) Toán học được giải quyết kém.


0

Về nguyên tắc có thể, nhưng cuối cùng bạn sẽ mô phỏng số học dấu phẩy động bằng cách sử dụng các số nguyên ở nhiều nơi, do đó không chắc là hiệu quả cho việc sử dụng chung. Đào tạo có khả năng là một vấn đề.

Nếu đầu ra của một lớp được chia tỷ lệ thành [-INT_MAX, INT_MAX], thì bạn cần nhân các giá trị đó theo trọng số (mà bạn cũng sẽ cần phải là số nguyên với phạm vi đủ lớn để việc học có thể tiến triển thuận lợi) và tổng hợp chúng, và sau đó đưa chúng vào một hàm phi tuyến tính.

Nếu bạn chỉ tự giới hạn các hoạt động số nguyên, điều này sẽ liên quan đến việc xử lý nhiều số nguyên để biểu thị các từ cao / thấp theo kiểu int lớn hơn, sau đó bạn phải chia tỷ lệ (giới thiệu phân chia số nguyên nhiều từ). Vào thời điểm bạn đã làm điều này, không có khả năng sẽ có nhiều lợi ích khi sử dụng số học số nguyên. Mặc dù có lẽ vẫn có thể, tùy thuộc vào sự cố, kiến ​​trúc mạng và CPU / GPU mục tiêu của bạn, v.v.

Có những trường hợp mạng thần kinh hoạt động được sử dụng trong thị giác máy tính chỉ có điểm nổi 8 bit (được ghép xuống sau khi đào tạo) . Vì vậy, chắc chắn có thể đơn giản hóa và xấp xỉ một số NN. Một NN dựa trên số nguyên có nguồn gốc từ fp 32 bit được đào tạo trước có thể có khả năng cung cấp hiệu suất tốt trong một số môi trường nhúng nhất định. Tôi đã tìm thấy thử nghiệm này trên chip AMD của PC cho thấy sự cải thiện biên ngay cả trên kiến ​​trúc PC. Trên các thiết bị không có xử lý fp chuyên dụng, sự cải thiện tương đối sẽ còn tốt hơn nữa.


Một phân chia số nguyên nhiều từ chắc chắn sẽ giết chết hiệu suất, nhưng không ai nên nghĩ về nó. Việc chia tỷ lệ như vậy được thực hiện đơn giản bằng cách dịch chuyển bit, có thể nhanh hơn hai bậc.
maaartinus

Xin chào Neil! Bạn có thời gian để đưa ra câu trả lời cho câu hỏi này ai.stackexchange.com/questions/20871/ không?
jgauth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.