Câu trả lời:
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.
Đ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.
Một số người có thể tranh luận chúng ta có thể sử dụng int
thay vì float
trong NN như float
có thể dễ dàng được biểu diễn như một int / k
nơi k
là một yếu tố nói nhân 10 ^ 9
ví 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 int
rơi vào INTEGER
tập hợp số trong khi floats
rơi vào REAL NUMBER
tậ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 1
hoặ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ệ int
thà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^n
công thức, trong đó n
số 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à để relu
kí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 valued
chứ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):
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] .
float
ké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).
+++
Đố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**10
là sai.
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 .
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:
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 ...
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 , Ở đâu , là xấp xỉ số nhị phân, là vô hướng thực, và là 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ì.
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:
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 , vì vậy trong , và . Lựa chọn 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ẽ , đó 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 a và b 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.
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.