Trả lời cho sự kiện TensorFlow Everywhere tại địa phương của bạn ngay hôm nay!
Trang này được dịch bởi Cloud Translation API.
Switch to English

Học liên kết

Tổng quat

Tài liệu này giới thiệu các giao diện hỗ trợ các tác vụ học tập liên kết, chẳng hạn như đào tạo hoặc đánh giá liên kết với các mô hình học máy hiện có được triển khai trong TensorFlow. Khi thiết kế các giao diện này, mục tiêu chính của chúng tôi là làm cho nó có thể thử nghiệm với học liên kết mà không yêu cầu kiến ​​thức về cách hoạt động của nó và đánh giá các thuật toán học liên kết được triển khai trên nhiều mô hình và dữ liệu hiện có. Chúng tôi khuyến khích bạn đóng góp lại cho nền tảng. TFF đã được thiết kế với mục đích lưu ý đến khả năng mở rộng và khả năng kết hợp, và chúng tôi hoan nghênh những đóng góp; chúng tôi rất vui khi thấy bạn nghĩ ra gì!

Các giao diện được cung cấp bởi lớp này bao gồm ba phần chính sau:

  • Mô hình . Các lớp và chức năng trợ giúp cho phép bạn gói các mô hình hiện có của mình để sử dụng với TFF. Việc gói một mô hình có thể đơn giản như gọi một hàm gói duy nhất (ví dụ: tff.learning.from_keras_model ) hoặc xác định một lớp con của giao diện tff.learning.Model để có thể tùy chỉnh đầy đủ.

  • Các nhà xây dựng tính toán liên bang . Các hàm trợ giúp xây dựng các phép tính liên hợp để đào tạo hoặc đánh giá, sử dụng các mô hình hiện có của bạn.

  • Bộ dữ liệu . Bộ sưu tập dữ liệu đóng hộp mà bạn có thể tải xuống và truy cập bằng Python để sử dụng trong việc mô phỏng các tình huống học tập liên kết. Mặc dù học liên kết được thiết kế để sử dụng với dữ liệu phi tập trung không thể tải xuống đơn giản tại một vị trí tập trung, nhưng ở giai đoạn nghiên cứu và phát triển, việc tiến hành các thử nghiệm ban đầu thường thuận tiện bằng cách sử dụng dữ liệu có thể tải xuống và thao tác cục bộ, đặc biệt là đối với các nhà phát triển có thể mới đối với cách tiếp cận.

Các giao diện này được định nghĩa chủ yếu trong không gian tên tff.learning , ngoại trừ các tập dữ liệu nghiên cứu và các khả năng liên quan đến mô phỏng khác đã được nhóm trong tff.simulation . Lớp này được thực hiện bằng cách sử dụng các giao diện cấp thấp hơn được cung cấp bởi Liên kết lõi (FC) , cũng cung cấp môi trường thời gian chạy.

Trước khi tiếp tục, chúng tôi khuyên bạn trước tiên nên xem lại các hướng dẫn về phân loại hình ảnhtạo văn bản , vì chúng giới thiệu hầu hết các khái niệm được mô tả ở đây bằng các ví dụ cụ thể. Nếu bạn quan tâm đến việc tìm hiểu thêm về cách TFF hoạt động, bạn có thể muốn đọc lướt qua hướng dẫn thuật toán tùy chỉnh dưới dạng giới thiệu về các giao diện cấp thấp hơn mà chúng tôi sử dụng để thể hiện logic của các phép tính liên hợp và để nghiên cứu việc triển khai hiện tại của giao diện tff.learning .

Mô hình

Các giả định về kiến ​​trúc

Serialization

TFF hướng tới việc hỗ trợ nhiều kịch bản học phân tán khác nhau trong đó mã mô hình học máy mà bạn viết có thể đang thực thi trên một số lượng lớn các máy khách không đồng nhất với các khả năng đa dạng. Mặc dù ở một đầu của phổ, trong một số ứng dụng, các máy khách đó có thể là máy chủ cơ sở dữ liệu mạnh mẽ, nhiều cách sử dụng quan trọng mà nền tảng của chúng tôi dự định hỗ trợ liên quan đến thiết bị di động và nhúng với tài nguyên hạn chế. Chúng tôi không thể giả định rằng các thiết bị này có khả năng lưu trữ thời gian chạy Python; điều duy nhất chúng ta có thể giả định tại thời điểm này là chúng có khả năng lưu trữ thời gian chạy TensorFlow cục bộ. Do đó, một giả định kiến ​​trúc cơ bản mà chúng tôi đưa ra trong TFF là mã mô hình của bạn phải có thể tuần tự hóa dưới dạng đồ thị TensorFlow.

Bạn vẫn có thể (và nên) phát triển mã TF của mình theo các phương pháp hay nhất mới nhất như sử dụng chế độ háo hức. Tuy nhiên, mã cuối cùng phải có thể tuần tự hóa (ví dụ: có thể được bao bọc dưới dạng hàm tf.function cho mã chế độ háo hức). Điều này đảm bảo rằng mọi trạng thái Python hoặc luồng điều khiển cần thiết tại thời điểm thực thi đều có thể được tuần tự hóa (có thể với sự trợ giúp của Autograph ).

Hiện tại, TensorFlow không hỗ trợ đầy đủ tuần tự hóa và giải mã TensorFlow ở chế độ háo hức. Do đó, tuần tự hóa trong TFF hiện tuân theo mẫu TF 1.0, trong đó tất cả mã phải được xây dựng bên trong một tf.Graph mà TFF điều khiển. Điều này có nghĩa là hiện tại TFF không thể sử dụng một mô hình đã được xây dựng; thay vào đó, logic định nghĩa mô hình được đóng gói trong một hàm no-arg trả về một tff.learning.Model . Hàm này sau đó được gọi bởi TFF để đảm bảo tất cả các thành phần của mô hình được tuần tự hóa. Ngoài ra, là một môi trường được đánh máy mạnh, TFF sẽ yêu cầu một chút siêu dữ liệu bổ sung, chẳng hạn như đặc điểm kỹ thuật của loại đầu vào mô hình của bạn.

Tổng hợp

Chúng tôi đặc biệt khuyên hầu hết người dùng nên xây dựng các mô hình bằng Keras, hãy xem phần Bộ chuyển đổi cho Keras bên dưới. Các trình bao bọc này xử lý việc tổng hợp các bản cập nhật mô hình cũng như bất kỳ chỉ số nào được xác định cho mô hình một cách tự động. Tuy nhiên, vẫn có thể hữu ích khi hiểu cách tổng hợp được xử lý cho một tff.learning.Model chung.

Luôn có ít nhất hai lớp tổng hợp trong học liên kết: tập hợp cục bộ trên thiết bị và tập hợp trên nhiều thiết bị (hoặc liên kết):

  • Tổng hợp cục bộ . Mức độ tổng hợp này đề cập đến sự tổng hợp trên nhiều lô ví dụ do một khách hàng cá nhân sở hữu. Nó áp dụng cho cả các tham số mô hình (biến), tiếp tục phát triển tuần tự khi mô hình được đào tạo cục bộ, cũng như các thống kê bạn tính toán (chẳng hạn như mất mát trung bình, độ chính xác và các số liệu khác), mà mô hình của bạn sẽ cập nhật lại cục bộ vì nó lặp lại trên từng luồng dữ liệu cục bộ của từng khách hàng.

    Thực hiện tổng hợp ở cấp độ này là trách nhiệm của mã mô hình của bạn và được thực hiện bằng cách sử dụng các cấu trúc TensorFlow tiêu chuẩn.

    Cấu trúc chung của quá trình xử lý như sau:

    • Đầu tiên, mô hình xây dựng tf.Variable s để chứa các tổng hợp, chẳng hạn như số lô hoặc số lượng ví dụ được xử lý, tổng tổn thất theo lô hoặc theo từng ví dụ, v.v.

    • TFF gọi phương thức forward_pass trên Model của bạn nhiều lần, tuần tự qua các lô dữ liệu khách hàng tiếp theo, cho phép bạn cập nhật các biến chứa các tổng hợp khác nhau như một tác dụng phụ.

    • Cuối cùng, TFF gọi phương thức report_local_outputs trên Mô hình của bạn để cho phép mô hình của bạn biên dịch tất cả các thống kê tóm tắt mà nó thu thập được thành một tập hợp số liệu nhỏ gọn để khách hàng xuất. Đây là nơi mã mô hình của bạn, chẳng hạn, có thể chia tổng số lỗ cho số lượng ví dụ được xử lý để xuất mức lỗ trung bình, v.v.

  • Liên kết tổng hợp . Mức độ tổng hợp này đề cập đến sự tổng hợp trên nhiều máy khách (thiết bị) trong hệ thống. Một lần nữa, nó áp dụng cho cả các tham số mô hình (biến), đang được tính trung bình trên các máy khách, cũng như các số liệu mà mô hình của bạn đã xuất do kết quả tổng hợp cục bộ.

    Thực hiện tổng hợp ở cấp độ này là trách nhiệm của TFF. Tuy nhiên, với tư cách là người tạo mô hình, bạn có thể kiểm soát quá trình này (thông tin thêm về điều này bên dưới).

    Cấu trúc chung của quá trình xử lý như sau:

    • Mô hình ban đầu và bất kỳ tham số nào được yêu cầu để đào tạo, được máy chủ phân phối đến một nhóm nhỏ các khách hàng sẽ tham gia vào một vòng đào tạo hoặc đánh giá.

    • Trên mỗi máy khách, một cách độc lập và song song, mã mô hình của bạn được gọi lặp đi lặp lại trên luồng các lô dữ liệu cục bộ để tạo ra một bộ thông số mô hình mới (khi đào tạo) và một bộ số liệu cục bộ mới, như được mô tả ở trên (đây là bộ tổng hợp).

    • TFF chạy một giao thức tổng hợp phân tán để tích lũy và tổng hợp các thông số mô hình và các chỉ số được xuất cục bộ trên toàn hệ thống. Logic này được thể hiện theo cách khai báo bằng cách sử dụng ngôn ngữ tính toán liên kết riêng của TFF (không phải trong TensorFlow), trong federated_output_computation. của Mô hình federated_output_computation. Xem hướng dẫn thuật toán tùy chỉnh để biết thêm về API tổng hợp.

Giao diện trừu tượng

Giao diện siêu dữ liệu + phương thức khởi tạo cơ bản này được đại diện bởi interface tff.learning.Model , như sau:

  • Các phương thức constructor, forward_passreport_local_outputs phải tạo các biến mô hình, chuyển tiếp và thống kê mà bạn muốn báo cáo tương ứng. TensorFlow được xây dựng bằng các phương pháp đó phải có thể tuần tự hóa, như đã thảo luận ở trên.

  • input_spec tính input_spec , cũng như 3 thuộc tính trả về tập hợp con của các biến cục bộ, không thể đào tạo và có thể đào tạo của bạn đại diện cho siêu dữ liệu. TFF sử dụng thông tin này để xác định cách kết nối các phần của mô hình của bạn với các thuật toán tối ưu hóa được liên kết và xác định chữ ký kiểu nội bộ để hỗ trợ xác minh tính đúng đắn của hệ thống đã xây dựng (để mô hình của bạn không thể được khởi tạo qua dữ liệu không khớp với những gì mô hình được thiết kế để tiêu dùng).

Ngoài ra, giao diện trừu tượng tff.learning.Model hiển thị một thuộc tính federated_output_computation tff.learning.Model , cùng với thuộc tính report_local_outputs được đề cập trước đó, cho phép bạn kiểm soát quá trình tổng hợp thống kê tóm tắt.

Bạn có thể tìm thấy các ví dụ về cách xác định tf.learning.Model tùy chỉnh của riêng bạn trong phần thứ hai của hướng dẫn phân loại hình ảnh của chúng tôi, cũng như trong các mô hình mẫu mà chúng tôi sử dụng để thử nghiệm trong model_examples.py .

Công cụ chuyển đổi cho Keras

Gần như tất cả thông tin được yêu cầu bởi TFF có thể được lấy ra bằng cách gọi các giao diện tf.keras , vì vậy nếu bạn có mô hình Keras, bạn có thể dựa vào tff.learning.from_keras_model để tạo một tff.learning.Model .

Lưu ý rằng TFF vẫn muốn bạn cung cấp một hàm tạo - một hàm mô hình không đối số, chẳng hạn như sau:

def model_fn():
  keras_model = ...
  return tff.learning.from_keras_model(keras_model, sample_batch, loss=...)

Ngoài chính mô hình, bạn cung cấp một loạt dữ liệu mẫu mà TFF sử dụng để xác định loại và hình dạng của đầu vào mô hình của bạn. Điều này đảm bảo rằng TFF có thể khởi tạo đúng mô hình cho dữ liệu thực sự sẽ có mặt trên các thiết bị khách (vì chúng tôi giả định rằng dữ liệu này thường không có sẵn tại thời điểm bạn đang xây dựng TensorFlow được tuần tự hóa).

Việc sử dụng trình bao bọc Keras được minh họa trong hướng dẫn phân loại hình ảnhtạo văn bản của chúng tôi.

Các nhà xây dựng tính toán liên bang

Gói tff.learning cung cấp một số trình xây dựng cho tff.Computation s thực hiện các nhiệm vụ liên quan đến học tập; chúng tôi hy vọng tập hợp các tính toán như vậy sẽ mở rộng trong tương lai.

Các giả định về kiến ​​trúc

Chấp hành

Có hai giai đoạn khác nhau trong việc chạy tính toán liên hợp.

  • Biên dịch : TFF đầu tiên biên dịch các thuật toán học liên hợp thành một biểu diễn tuần tự trừu tượng của toàn bộ tính toán phân tán. Đây là khi tuần tự hóa TensorFlow xảy ra, nhưng các biến đổi khác có thể xảy ra để hỗ trợ thực thi hiệu quả hơn. Chúng tôi đề cập đến biểu diễn tuần tự do trình biên dịch phát ra dưới dạng tính toán liên hợp .

  • Execute TFF cung cấp các cách để thực thi các tính toán này. Hiện tại, việc thực thi chỉ được hỗ trợ thông qua mô phỏng cục bộ (ví dụ: trong sổ ghi chép sử dụng dữ liệu phi tập trung được mô phỏng).

Một phép tính liên kết được tạo bởi API học tập liên kết của TFF, chẳng hạn như thuật toán đào tạo sử dụng tính trung bình của mô hình liên kết hoặc đánh giá liên hợp, bao gồm một số yếu tố, đáng chú ý nhất là:

  • Mẫu mã mô hình được tuần tự hóa của bạn cũng như mã TensorFlow bổ sung được tạo bởi khung Học tập liên kết để thúc đẩy vòng lặp đào tạo / đánh giá mô hình của bạn (chẳng hạn như xây dựng trình tối ưu hóa, áp dụng cập nhật mô hình, lặp quatf.data.Dataset s và các chỉ số máy tính, và áp dụng bản cập nhật tổng hợp trên máy chủ, để đặt tên cho một số).

  • Đặc điểm kỹ thuật khai báo của giao tiếp giữa máy kháchmáy chủ (thường là nhiều dạng tổng hợp khác nhau trên các thiết bị máy khách và truyền phát từ máy chủ tới tất cả máy khách) và cách thức giao tiếp phân tán này được xen kẽ với việc thực thi máy khách cục bộ hoặc máy chủ cục bộ của mã TensorFlow.

Các phép tính liên kết được đại diện trong biểu mẫu được tuần tự hóa này được thể hiện bằng ngôn ngữ nội bộ độc lập với nền tảng khác với Python, nhưng để sử dụng API học liên kết, bạn sẽ không cần phải quan tâm đến các chi tiết của biểu diễn này. Các tính toán được biểu diễn trong mã Python của bạn dưới dạng các đối tượng kiểu tff.Computation , đối với hầu hết các phần, bạn có thể coi là các đối tượng có thể callable Python.

Trong phần hướng dẫn, bạn sẽ gọi các phép tính liên kết đó như thể chúng là các hàm Python thông thường, được thực thi cục bộ. Tuy nhiên, TFF được thiết kế để thể hiện các phép tính liên hợp theo cách không phù hợp với hầu hết các khía cạnh của môi trường thực thi, để chúng có thể triển khai được, ví dụ như các nhóm thiết bị chạy Android hoặc các cụm trong một trung tâm dữ liệu. Một lần nữa, hệ quả chính của việc này là những giả định mạnh mẽ về việc tuần tự hóa . Đặc biệt, khi bạn gọi một trong các phương thức build_... được mô tả bên dưới, việc tính toán sẽ được tuần tự hóa hoàn toàn.

Trạng thái mô hình hóa

TFF là một môi trường lập trình chức năng, nhưng nhiều quy trình quan tâm đến việc học liên kết là trạng thái. Ví dụ, một vòng huấn luyện bao gồm nhiều vòng lấy trung bình mô hình liên kết là một ví dụ về những gì chúng ta có thể phân loại là một quy trình trạng thái . Trong quá trình này, trạng thái phát triển từ vòng này sang vòng khác bao gồm tập hợp các tham số mô hình đang được huấn luyện và có thể là trạng thái bổ sung được liên kết với trình tối ưu hóa (ví dụ: vectơ động lượng).

Vì TFF có chức năng, các quy trình trạng thái được mô hình hóa trong TFF dưới dạng các phép tính chấp nhận trạng thái hiện tại làm đầu vào và sau đó cung cấp trạng thái cập nhật làm đầu ra. Để xác định đầy đủ một quy trình trạng thái, người ta cũng cần chỉ định trạng thái ban đầu đến từ đâu (nếu không chúng ta không thể khởi động quy trình). Điều này được nắm bắt trong định nghĩa của lớp trợ giúp tff.templates.IterativeProcess , với 2 thuộc tính initializenext tương ứng với lần khởi tạo và lặp lại tương ứng.

Các nhà xây dựng có sẵn

Hiện tại, TFF cung cấp hai hàm xây dựng tạo ra các tính toán liên hợp để đào tạo và đánh giá liên hợp:

Bộ dữ liệu

Các giả định về kiến ​​trúc

Lựa chọn khách hàng

Trong kịch bản học liên thông thường, chúng tôi có một số lượng lớn những khả năng hàng trăm triệu thiết bị khách hàng, trong đó chỉ có một phần nhỏ có thể tích cực và có sẵn để đào tạo tại bất kỳ thời điểm nào (ví dụ, điều này có thể được giới hạn cho các khách hàng có được cắm vào nguồn điện, không phải trên mạng đo lường, và nếu không thì không hoạt động). Nói chung, nhóm khách hàng có sẵn để tham gia đào tạo hoặc đánh giá nằm ngoài tầm kiểm soát của nhà phát triển. Hơn nữa, vì việc điều phối hàng triệu khách hàng là không thực tế, một vòng đào tạo hoặc đánh giá điển hình sẽ chỉ bao gồm một phần nhỏ các khách hàng có sẵn, có thể được lấy mẫu ngẫu nhiên .

Hệ quả chính của điều này là các tính toán liên hợp, theo thiết kế, được thể hiện theo cách mà không biết đến nhóm người tham gia chính xác; tất cả quá trình xử lý được thể hiện dưới dạng các hoạt động tổng hợp trên một nhóm trừu tượng gồm các khách hàng ẩn danh và nhóm đó có thể thay đổi từ vòng đào tạo này sang vòng đào tạo khác. Sự ràng buộc thực tế của tính toán với những người tham gia cụ thể, và do đó với dữ liệu cụ thể mà họ cung cấp vào tính toán, do đó được mô hình hóa bên ngoài bản thân tính toán.

Để mô phỏng việc triển khai thực tế mã học tập liên kết của bạn, bạn thường sẽ viết một vòng lặp đào tạo giống như sau:

trainer = tff.learning.build_federated_averaging_process(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

while True:
  data_for_this_round = sample(federated_training_data)
  state, metrics = trainer.next(state, data_for_this_round)

Để tạo điều kiện thuận lợi cho việc này, khi sử dụng TFF trong mô phỏng, dữ liệu liên kết được chấp nhận dưới dạng list Python, với một phần tử trên mỗi thiết bị khách tham gia để đại diện chotf.data.Dataset cục bộ của thiết bị đó.

Giao diện trừu tượng

Để chuẩn hóa việc xử lý các tập dữ liệu liên kết được mô phỏng, TFF cung cấp một giao diện trừu tượng tff.simulation.ClientData , cho phép một người liệt kê tập hợp các máy khách và tạo mộttf.data.Dataset chứa dữ liệu của một máy khách cụ thể. Cáctf.data.Dataset đó có thể được cung cấp trực tiếp làm đầu vào cho các phép tính liên hợp được tạo ở chế độ háo hức.

Cần lưu ý rằng khả năng truy cập danh tính khách hàng là một tính năng chỉ được cung cấp bởi bộ dữ liệu để sử dụng trong các mô phỏng, trong đó khả năng đào tạo về dữ liệu từ các tập hợp con cụ thể của các khách hàng có thể cần thiết (ví dụ: để mô phỏng tính khả dụng hàng ngày của các loại khách hàng). Các tính toán đã biên dịch và thời gian chạy cơ bản không liên quan đến bất kỳ khái niệm nào về danh tính khách hàng. Sau khi dữ liệu từ một tập hợp con khách hàng cụ thể đã được chọn làm đầu vào, ví dụ: trong lệnh gọi tff.templates.IterativeProcess.next , danh tính khách hàng không còn xuất hiện trong đó nữa.

Bộ dữ liệu có sẵn

Chúng tôi đã dành riêng không gian tên tff.simulation.datasets cho các tập dữ liệu triển khai giao diện tff.simulation.ClientData để sử dụng trong mô phỏng và gieo vào nó 2 tập dữ liệu để hỗ trợ phân loại hình ảnh và hướng dẫn tạo văn bản . Chúng tôi muốn khuyến khích bạn đóng góp tập dữ liệu của riêng bạn cho nền tảng.