한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Android에서 한 번만 작성하면 어디서든 테스트 실행 가능합니다
2019년 1월 30일 수요일
<블로그 원문은
이곳
에서 확인하실 수 있으며 블로그 번역 리뷰는 이승민(Android GDE)님이 참여해 주셨습니다>
우리는 18’Google I/O에서
Jetpack
의 일환으로 AndroidX Test를 출시했습니다. Robolectric v4.0과 함께
v1.0.0
Final에 대해서도 소개해드립니다. 1.0.0 버전의 일부로, 모든 AndroidX Test가 이제
오픈소스
로 제공됩니다.
AndroidX Test는 instrumentation 및 Robolectric 테스트를 포함한 테스트 환경에서 공통 테스트 API를 제공합니다. 그리고 기존의 Android JUnit 4 지원 기능, Espresso 뷰 상호 작용 라이브러리, 여러 가지 새로운 주요 테스트 API를 포함합니다. 이러한 API는 실제 기기와 가상 기기에서 instrumentation 테스트에 사용할 수 있습니다. 현재 Robolectric 4.0에서 이들 API를 로컬 JVM 테스트에도 사용할 수 있습니다.
로그인 화면을 시작하고, 유효한 사용자 이름과 암호를 입력하고, 홈 화면으로 이동하는지 확인하는 다음 사용 사례를 생각해 보세요.
테스트를 단계별로 살펴봅시다.
새로운
ActivityScenario
API를 사용하여 LoginActivity를 시작합니다. 이를 통해 액티비티를 생성하고 재개된(resumed) 상태로 전환하는데, 그러면 사용자에게 표시되어 사용자의 입력을 받을 준비가 됩니다. ActivityScenario는 시스템과의 모든 동기화를 처리하고, 시스템에서 앱을 종료하고(destroyed) 다시 생성하는(recreated) 것과 같이, 테스트해봐야 하는 공통 시나리오에 대한 지원을 제공합니다.
우리는 Espresso 뷰 상호 작용 라이브러리를 사용하여 두 텍스트 입력란에 텍스트를 입력하고 UI에서 버튼을 클릭합니다. ActivityScenario와 마찬가지로, Espresso는 멀티스레딩과 동기화를 자동으로 처리하고 테스트 작성에 사용하기 위해 읽을 수 있는 fluent API를 표시합니다.
우리는 캡처된 인텐트의 목록을 반환하는 새로운
Intents.getIntents()
Espresso API를 사용합니다. 그런 다음, 새로운 Android Truth 확장 프로그램에 속한 IntentSubject.assertThat()을 사용하여 캡처된 인텐트를 확인합니다. Android Truth 확장 프로그램은 기본 Android 프레임워크 객체의 상태를 확인하기 위해 다양한 표현을 제공하고 읽을 수 있는 API를 제공합니다.
Robolectric 또는 임의의 실제 기기나 가상 기기를 사용하여 로컬 JVM에서 이 테스트를 실행할 수 있습니다.
Android 기기에서 테스트를 실행하려면 다음 의존성과 함께 'androidTest' 소스 루트에 테스트를 배치하세요.
androidTestImplementation(“androidx.test:runner:1.1.0”)
androidTestImplementation(“androidx.test.ext:junit:1.0.0”)
androidTestImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
androidTestImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
androidTestImplementation(“androidx.test.ext:truth:1.0.0”)
실제 기기나 가상 기기에서 실행하면 작성한 코드가 Android 시스템과 올바르게 상호 작용함을 확실히 알 수 있습니다. 하지만 테스트 사례의 수가 늘어남에 따라 테스트 실행 시간이 영향을 받기 시작합니다. 로컬 JVM에서 더 빠르게 테스트를 실행할 수 있는 Robolectric과 같은 시뮬레이터에서 다수의 작은 단위 테스트를 실행하는 동안 실제 기기에서는 소수의 더 큰 테스트만 실행하도록 결정할 수 있습니다.
Robolectric 시뮬레이터를 사용하여 로컬 JVM에 대한 테스트를 실행하려면 '테스트' 소스 루트에 테스트를 배치하고 gradle.build에 다음 행을 추가하세요.
testImplementation(“androidx.test:runner:1.1.0”)
testImplementation(“androidx.test.ext:junit:1.0.0”)
testImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
testImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
testImplementation(“androidx.test.ext:truth:1.0.0”)
testImplementation (“org.robolectric:robolectric:4.0”)
android {
testOptions.unitTests.includeAndroidResources = true
}
시뮬레이터와 instrumentation 사이의 테스트 API를 통합하면 많은 흥미로운 가능성이 열립니다! Google I/O에서도 발표한 Project Nitrogen을 통해 런타임 환경 간에 테스트를 원활하게 이동할 수 있을 것입니다. 이는 곧 새로운 AndroidX Test API에 대해 작성된 테스트를 수행하고 로컬 JVM, 실제 기기 또는 가상 기기, 더 나아가 Firebase Test Lab과 같은 클라우드 기반 테스트 플랫폼에서도 테스트를 실행할 수 있음을 의미합니다. 이를 통해 개발자가 자신이 개발한 애플리케이션의 품질에 관해 빠르고 정확하며 실행 가능한 피드백을 받을 수 있는 기회를 누리게 될 것이라는 사실에 매우 기쁩니다.
마지막으로, 모든 AndroidX 컴포넌트가 완전히
오픈소스로 제공
된다는 것을 뿌듯한 마음으로 알려드리며, 개발자 여러분의 기여를 기다리겠습니다.
자세히 알아보기
문서:
https://developer.android.com/testing
출시 노트:
AndroidX Test:
https://developer.android.com/training/testing/release-notes
Robolectric:
https://github.com/robolectric/robolectric/releases/
Robolectric:
https://github.com/robolectric/robolectric
AndroidX Test:
https://github.com/android/android-test
AdaNet 소개: 학습 보장을 이용한 빠르고 유연한 AutoML
2019년 1월 24일 목요일
<블로그 원문은
이곳
에서 확인하실 수 있습니다>
게시자: Charles Weill, Google AI 소프트웨어 엔지니어(뉴욕)
다양한 머신러닝(ML) 모델 예측 결과를 조합하는 기술인
앙상블 학습
은 최상의 성능 달성을 위해 신경망과 함께 널리 사용되는데, 이를 바탕으로 풍부한 기록과 이론적 보장을 활용해
Netflix Prize
및 다양한
Kaggle 경진 대회
와 같은 도전에서 성공을 거둘 수 있습니다. 그런데 실제로는 훈련 시간이 길어 그다지 많이 사용되지는 않으며, ML 모델 후보를 선택할 때 해당 분야에 대한 고유의 전문성이 요구됩니다. 하지만 TPU와 같은 뛰어난 전산 처리 능력을 갖춘 전문 딥 러닝 하드웨어를
더욱 손쉽게 바로 사용할 수 있게 됨으로써
, 머신러닝 모델이
더욱 크게 성장
할 것이며 앙상블이 더욱 큰 비중을 차지하게 될 것입니다. 신경망 아키텍처를 통해 자동으로 검색하면서 최선의 선택 사항을 고품질 모델에 결합하는 방법을 학습하는 도구를 상상해 보세요.
오늘 최소한의 전문가 개입만으로 고품질 모델을 자동으로 학습하기 위한 경량의
TensorFlow
기반 프레임워크인
AdaNet
을 공유하게 되어 더없이 기쁩니다. AdaNet은 우리가 최근에 힘을 쏟고 있는
강화 학습
및
진화
기반 AutoML을 토대로 구축된 프레임워크로, 빠르고 유연하면서도 학습 보장을 제공합니다. 중요한 점은, AdaNet이 신경망 아키텍처를 학습하기 위한 일반적인 프레임워크뿐 아니라 훨씬 더 나은 모델을 얻기 위해 앙상블을 이루는 방법을 학습하기 위한 프레임워크도 제공한다는 사실입니다.
AdaNet은 사용하기 쉽고 고품질 모델을 생성하므로, ML 현업 전문가가
최적의 신경망 아키텍처를 선택
하고 하위 네트워크의 앙상블로서 신경망 아키텍처를 학습하기 위한 적응형 알고리즘을 구현하는 데 통상적으로 소요되는 시간을 절약할 수 있습니다. AdaNet은 다양한 깊이와 폭의 하위 네트워크를 추가하여 다양한 앙상블을 만들고 성능 향상과 매개변수의 개수를 적절히 절충할 수 있습니다.
신경망의 앙상블을 순응적으로 성장시키는 AdaNet. AdaNet은 반복할 때마다 각 후보에 대한 앙상블 손실을 측정하여 다음 반복으로 이동하기에 최상의 후보를 선정합니다.
빠르고 사용하기 쉬움
AdaNet은 서비스 제공을 위해 훈련, 평가, 예측 및 내보내기를 캡슐화하여 머신러닝 프로그래밍을 대폭 간소화하는
TensorFlow Estimator
인터페이스를 구현합니다. AdaNet은
TensorFlow Hub 모듈
,
TensorFlow Model Analysis
및
Google Cloud의 Hyperparameter Tuner
와 같은 오픈소스 도구와 통합됩니다. 분산 훈련 지원으로 훈련 시간이 상당히 단축되고 사용 가능한 CPU 및 액셀러레이터(예: GPU)와 함께 선형적으로 스케일링됩니다.
CIFAR-100에서 훈련 단계(x축)에 따른 AdaNet의 정확도(y축). 파란색 선은 훈련 세트에 대한 정확도이고 빨간색 선은 테스트 세트에 대한 성능입니다. 1백만 단계마다 새로운 하위 네트워크가 훈련을 시작하고, 결국 앙상블의 성능을 높여줍니다. 회색 선과 녹색 선은 새 하위 네트워크를 추가하기 전 앙상블의 정확도입니다.
TensorBoard
는 훈련 중에 모델 측정항목을 시각화하기 위한 최상의 TensorFlow 기능 중 하나이므로, AdaNet은 하위 네트워크 훈련, 앙상블 컴퍼지션 및 성능을 모니터링하기 위해 TensorBoard와 완벽하게 통합됩니다. AdaNet은 훈련을 마치면
TensorFlow Serving
과 함께 배포 가능한 SavedModel을 내보냅니다.
학습 보장
신경망의 앙상블을 빌드하려면 여러 가지 문제를 해결해야 합니다. 예컨대 고려해야 할 최상의 하위 네트워크 아키텍처는 무엇일까요? 같은 아키텍처를 재사용하는 것이 최선일까요, 아니면 다양성을 장려하는 것이 최선일까요? 매개변수가 더 많은 복잡한 하위 네트워크가 훈련 세트에 대해 더 나은 성능을 발휘하는 경향이 있겠지만, 복잡성이 증가하므로 알지 못하는 데이터에 대해 이를 섣불리 일반화할 수는 없습니다. 이러한 문제는 모델 성능 평가에서 비롯됩니다. 훈련 세트에서 분할되는 홀드아웃 세트에 대한 성능을 평가할 수 있지만, 그 과정에서 신경망 훈련을 위해 사용할 수 있는 예의 개수가 줄어듭니다.
그 대신, ('
AdaNet: Adaptive Structural Learning of Artificial Neural Networks
',
ICML 2017
에 제시된) AdaNet의 접근 방식은 훈련 세트에 대한 앙상블의 성능과 이를 알지 못하는 데이터에 대해 일반화하는 능력 사이에서 균형을 유지하며 절충한다는 목표를 최적화하는 것입니다. 어떤 후보 하위 네트워크가 앙상블의 일반화 능력에 미치는 영향보다 더 많이 앙상블의 훈련 손실을 개선할 때만 앙상블이 해당 하위 네트워크를 포함한다는 것이 직관적 통찰입니다. 이는 다음 사항을 보장합니다.
앙상블의 일반화 오류가 훈련 오류와 복잡성에 의해 한정됩니다.
우리는 이 목표를 최적화함으로써 이 한계를 직접적으로 최소화하고 있습니다.
이 목표를 최적화하는 실용적인 이점은 앙상블에 추가할 후보 하위 네트워크를 선택하기 위한 홀드아웃 세트의 필요성을 제거한다는 점입니다. 이는 하위 네트워크를 훈련하기 위해 더 많은 훈련 데이터를 사용할 수 있도록 한다는 추가적 이점이 있습니다. 자세한 내용은
AdaNet 목표에 대한 가이드
를 살펴보세요.
확장성
우리는 연구 및 생산 용도로 모두 유용한 AutoML 프레임워크를 만드는 관건이 합리적인 기본값을 제공할 뿐 아니라 사용자가 자체적인 하위 네트워크/모델 정의를 적용해 볼 수 있도록 하는 것이라 믿습니다. 따라서 머신러닝 연구자, 현업 전문가, 애호가가 모두
tf.layers
와 같은 상위 레벨 TensorFlow API를 사용하여 자체적인 AdaNet
adanet.subnetwork.Builder
를 정의해 보실 것을 권장합니다.
TensorFlow 모델을 시스템에 이미 통합한 사용자는 TensorFlow 코드를 AdaNet 하위 네트워크로 손쉽게 변환하고
adanet.Estimator
를 사용하여 모델 성능을 향상하는 동시에 학습 보장을 받을 수 있습니다. AdaNet은 후보 하위 네트워크의 정의된 검색 공간을 탐색하고 하위 네트워크를 조화시키는 방법을 학습할 것입니다. 예를 들어, 우리는
NASNet-A CIFAR 아키텍처
의
오픈소스 구현
을 선택하여 하위 네트워크로 변환하고 8회의 AdaNet 반복 후 CIFAR-10의 최신 결과를 바탕으로 개선했습니다. 게다가, 우리의 모델은 다음과 같이 더 적은 수의 매개변수로 이러한 결과를 성취합니다.
Zoph 외, 2018에 제시된 NASNet-A 모델의 성능과 CIFAR-10에 소규모 NASNet-A 하위 네트워크를 결합하기 위한 AdaNet 학습의 비교.
또한 사용자들에게 회귀, 분류 및 멀티태스크 학습 문제를 훈련하기 위해 기성 또는 맞춤형
tf.contrib.estimator.Heads
를 통해 AdaNet 목표의 일부로서 자체적인 맞춤 손실 함수를 사용할 것도 권장하는 바입니다.
사용자는
adanet.subnetwork.Generator
클래스를 확장하여 탐색할 후보 하위 네트워크의 검색 공간을 완전히 정의할 수도 있습니다. 사용자는 이를 통해 사용 가능한 하드웨어를 기반으로 검색 공간을 늘리거나 줄일 수 있습니다. 하위 네트워크의 검색 공간은 다양한 임의의 속도로 동일한 하위 네트워크 구성을 복제하기만 하면 간단하게 다양한 하이퍼 매개변수 조합으로 수십 개의 하위 네트워크를 훈련하고 AdaNet이 최종 앙상블에 포함할 하위 네트워크를 선택하도록 할 수 있습니다.
직접 AdaNet을 사용해보고 싶은 분은 우리의
Github 저장소
를 확인해보시고
가이드 노트북
의 안내에 따라 사용해보세요. 손쉽게 시작하실 수 있도록
조밀한 계층과 콘볼루션을 사용하는 작업 예제
를 몇 개 포함해 두었습니다. AdaNet은 계속 이어지는 연구 프로젝트이므로 자발적 기여를 환영합니다. AdaNet이 연구 커뮤니티에 어떤 도움이 될 수 있을지 설레는 마음으로 지켜보고 있습니다.
감사의 말
Corinna Cortes, Mehryar Mohri, Xavi Gonzalvo, Charles Weill, Vitaly Kuznetsov, Scott Yak, Hanna Mazzawi를 비롯한 핵심 팀원의 노고 덕분에 이 프로젝트를 진행할 수 있었습니다. 우리가 진행한 테스트 작업을 도와주신 Google의 Gus Kristiansen, Galen Chuang, Ghassen Jerfel, Vladimir Macko, Ben Adlam, Scott Yang 등 많은 공동작업자, 레지던트 및 인턴 사원 여러분께도 특별한 감사의 마음을 전합니다.
reCAPTCHA v3 소개: 봇을 저지할 새로운 방법
2019년 1월 24일 목요일
<블로그 원문은
이곳
에서 확인하실 수 있습니다>
게시자: Wei Liu, Google 제품 관리자
[
Google 웹마스터 센트럴 블로그
에서 교차 게시]
오늘 우리는 기쁘고 설레는 마음으로 reCAPTCHA v3를 소개합니다. 사용자 상호 작용 없이 웹사이트에서 악성 트래픽을 감지하는 데 도움이 되는 최신 API입니다.
reCAPTCHA v3
는 CAPTCHA 보안 인증 질문을 표시하는 대신, 웹사이트에 가장 적절한 액션을 선택할 수 있도록 점수를 반환합니다.
원활한 사용자 환경
지난 10년간, reCAPTCHA는 지속적으로 기술을 발전시켜 왔습니다. reCAPTCHA v1에서는 모든 사용자가 비틀린 텍스트를 읽고 이를 입력란에 입력하는 방식으로 보안 인증 질문을 통과해야 했습니다. 사용자 환경과 보안을 모두 향상하기 위해, 우리는 reCAPTCHA v2를 도입하면서 인간의 요청인지 봇의 요청인지 결정하기 위해 다른 다양한 신호를 사용하기 시작했습니다. 이를 통해 reCAPTCHA 인증 질문을 악용 시도의 감지에 있어 주된 역할에서 보조적 역할로 옮길 수 있었고, 그 덕분에 사용자 중 약 절반 정도가 클릭 한 번으로 인증을 통과할 수 있었습니다. 우리는 이제 reCAPTCHA v3를 내놓으면서 어떤 상호 작용이 얼마나 의심스러운지 알려주는 점수를 반환하고 보안 인증 질문으로 사용자의 사이트 이용을 중단시킬 필요성을 완전히 없앰으로써 사이트에서 사람의 활동과 봇의 활동을 감지하기 위한 테스트를 수행하는 방식을 근본적으로 변화시키고 있습니다. reCAPTCHA v3는 백그라운드에서 적응형 위험 분석을 실행하여 의심스러운 트래픽을 알려주도록 하는 동시에 인간 사용자는 사이트에서 아무런 중단 없이 원활하게 사용하도록 할 수 있습니다.
'액션'으로 더욱 정확하게 봇 감지
reCAPTCHA v3에서는 '액션'이라는 새로운 개념을 도입하는데, 이는 사용자가 사용 과정에서 만나는 주요 단계를 정의하고 reCAPTCHA가 상황에 맞게 위험 분석을 실행하도록 하기 위해 사용할 수 있는 태그입니다. reCAPTCHA v3는 사용자를 방해하지 않으므로 reCAPTCHA v3를 여러 페이지에 추가하는 것이 좋습니다. 이런 식으로, reCAPTCHA 적응형 위험 분석 엔진은 웹사이트의 다양한 페이지에서 발생하는 활동을 살펴보면서 공격자의 패턴을 더욱 정확히 식별할 수 있습니다. reCAPTCHA 관리 콘솔에서 reCAPTCHA 점수 분포에 대한 전체 개요 정보와 사이트에서 이루어지는 10대 작업의 상태에 대한 분석 정보를 얻을 수 있으며, 이를 통해 정확히 어떤 페이지가 봇의 공격 대상이며 해당 페이지에서 얼마나 의심스러운 트래픽이 발생했는지 파악할 수 있습니다.
나만의 방식으로 봇에 대응
reCAPTCHA v3에서 얻을 수 있는 또 다른 큰 이점은 자신의 웹사이트에 가장 적합한 방식으로 스팸과 악용을 방지할 수 있는 유연성입니다. 이전에는 reCAPTCHA 시스템이 주로 언제, 어떤 CAPTCHA가 사용자에게 서비스를 제공할지 결정했으므로, 사용자가 자신이 운영하는 웹사이트의 사용자 환경에 대해 미칠 수 있는 영향력이 제한적이었습니다. 하지만 이제 reCAPTCHA v3는 어떤 상호 작용이 얼마나 의심스러운지 알려주는 점수를 제공합니다. 이 점수를 사용할 수 있는 방법으로는 세 가지가 있습니다. 첫째, 보안 절차에서 사용자를 통과시키는 시점이나 예컨대 2단계 인증과 전화 확인 방법을 사용하여 추가적인 검증을 수행할 필요가 있는 시점을 결정하는 임계값을 설정할 수 있습니다. 둘째, reCAPTCHA가 액세스할 수 없는 고유의 신호(예: 사용자 프로필 또는 트랜잭션 기록)와 점수를 결합할 수 있습니다. 셋째, 머신러닝 모델이 악용 시도에 대응하도록 훈련하기 위한 신호 중 하나로서 reCAPTCHA 점수를 사용할 수 있습니다. 이 새로운 버전에서는 다양한 유형의 트래픽에 대해 발생하는 작업을 맞춤설정하는 위와 같은 새로운 방법을 제공함으로써 웹사이트의 특정 요구를 기반으로 사이트를 봇으로부터 보호하고 사용자 환경을 개선할 수 있습니다.
요컨대, reCAPTCHA v3는 사용자에게 전혀 불편을 끼치지 않고 사이트를 보호하는 데 도움이 되고, 위험한 상황에서의 대처 방법을 결정하는 데 있어 더 많은 권한을 부여합니다. 늘 그렇듯이, 우리는 매일 공격자보다 한발 앞서서 (봇을 제외한 모든 사용자가) 인터넷을 계속 쉽고 안전하게 사용할 수 있도록 하기 위해 최선을 다합니다.
reCAPTCHA v3를 시작할 준비가 되셨나요? 자세한 내용을 보려면
개발자 사이트
를 방문하세요.
2018년 샌프란시스코에서 열린 O’Reilly AI 컨퍼런스의 TensorFlow 세션 녹화 자료
2019년 1월 24일 목요일
<블로그 원문은
이곳
에서 확인하실 수 있습니다>
게시자: Marcus Chang, 개발자 홍보 프로그램 관리자
O’Reilly AI 컨퍼런스(샌프란시스코)
지난 9월, TensorFlow 팀은 샌프란시스코에서 TensorFlow Lite, TensorFlow.js, TFX (Extended) & Hub, Distributed TensorFlow 등을 비롯한 다양한 주제를 다룬 O’Reilly AI 컨퍼런스에서 TensorFlow 관련 강연을 이틀간 진행했습니다. 그 내용을 시청하실 수 있도록 TensorFlow YouTube 채널에 세션 녹화 자료를 업로드해두었으니 꼭 챙겨 보시기 바랍니다.
전체 재생목록은
여기
에서 확인하세요.
세션:
Building AI with TensorFlow: An Overview
TensorFlow는 세계 최대의 오픈소스 프로젝트 중 하나로, 계속 채택률이 높아지고 있고 기능도 다양해지고 있습니다. 우리는 최근의 주요 개발 사항을 공유하고 몇 가지 미래 방향성을 강조한 것과 더불어, 개발자가 TensorFlow 커뮤니티에 더 적극적으로 참여할 수 있는 방법도 토론했습니다.
TensorFlow: Machine Learning for Programmers
이 강연에서는 Google의 Laurence Moroney가 머신러닝, AI, 딥 러닝 등과 이들이 프로그래머 툴킷에 어떻게 들어맞는지에 관한 얘기를 들려주었습니다. Laurence는 머신러닝에 관해 부풀려진 온갖 과대 광고는 쏙 빼고 머신러닝에서 엿볼 수 있는 진짜 기회를 보여주는 데 주력했습니다. 또한 TensorFlow를 소개하면서 어째서 TensorFlow가 머신러닝을 쉽고 액세스 가능하게 만들도록 설계된 프레임워크인지, 그리고 ML을 사용하는 지능형 앱이 어떻게 모바일, 웹 및 IoT를 포함한 다양한 공간에서 작동할 수 있는지 설명했습니다.
TensorFlow for JavaScript
TensorFlow.js는 브라우저와 Node.js에서 작동하는 TensorFlow의 자바스크립트 버전으로, 최근에 출시되었습니다. 이 강연에서는 관련 팀이 TensorFlow.js ML 프레임워크를 소개하고 교육, 클라이언트 측 배포, 전이 학습을 비롯하여 완전한 머신러닝 워크플로를 수행하는 방법에 관한 데모를 보여주었습니다.
Swift for TensorFlow
Swift for TensorFlow는 Eager Execution의 유연성을 Graphs와 Sessions의 높은 성능과 결합한 것입니다. Swift는 개발자의 Tensor 코드를 백그라운드에서 분석해 그래프를 자동으로 빌드해 줍니다. 또한 Swift는 코드를 실행하기 전에 입력 실수와 형태 불일치를 포착하고, 어떤 Python 라이브러리라도 가져올 수 있으며, 언어가 통합된 Automatic Differentiation을 가지고 있습니다. 우리는 머신러닝 도구가 일류 수준의 언어와 컴파일러가 제공하는 혜택을 받을 자격이 있을 정도로 중요하다고 믿습니다.
TensorFlow Lite
TensorFlow Lite는 (휴대폰부터 Raspberry Pi와 마이크로컨트롤러에 이르기까지) 다양한 휴대기기와 소형 기기에서 추론 기능을 수행할 수 있는 경량 머신러닝 프레임워크입니다. 또한 AI 가속기에 액세스할 수 있게 해주는 간단한 추상화 기능도 제공합니다. 강연을 진행한 팀은 프레임워크의 기초, 개발 현황, 최신 개발 사항에 대해 설명했습니다. 이 세션에서는 개발자의 모델을 모바일에 맞춰 준비하는 방법과 여러 다양한 플랫폼에서 실행할 수 있는 코드 작성 방법의 개념을 배울 수 있습니다.
TensorFlow Extended (TFX) & Hub
이 세션에서는 TensorFlow를 위한 완벽한 머신러닝 플랫폼으로서, 모든 Alphabet 제품에 사용할 수 있는 TensorFlow Extended(TFX)를 소개했습니다. 머신러닝이 실험 단계에서 프로덕션 작업 부하를 처리하는 단계로 발전함에 따라, 모델 관리, 버전 관리, 서비스 제공을 비롯하여 완전한 훈련 및 프로덕션 워크플로를 효과적으로 관리할 필요성도 높아지고 있습니다.
Cloud TPUs
이 강연에서는 Google의 Cloud TPU 가속기에 대한 심층적인 기술적 사항과 더불어 이런 가속기의 프로그래밍 방법을 다룹니다. 또한 단일 기기부터 전체 Cloud TPU 포드까지, CPU, GPU 및 Cloud TPU에서 모델을 실행할 수 있게 해주는 프로그래밍 추상화도 다룹니다.
TensorFlow Autograph
TensorFlow AutoGraph는 소스 코드 변환을 사용하여 일반 Python 코드를 TensorFlow의 동등한 코드로 자동으로 변환합니다. 우리의 접근 방식은 새로운 TensorFlow Eager 프로젝트로 보완하는 것으로, 이를 통해 Eager 모드의 필수 스타일을 사용하는 동시에 그래프 모드의 이점은 유지할 수 있도록 할 것입니다. 개발자는 자동 코드 변환을 사용하여 더 간결하고 효율적이면서도 강력한 코드를 작성할 수 있습니다.
TensorFlow Probability
TFP(TensorflowProbability)는 신규 및 기존의 확률/통계 도구에 모두 첨단 기능을 제공하는 TF/Python 라이브러리입니다. 통계학자/데이터 사이언티스트는 자연스럽게 첨단 하드웨어를 활용하는 R과 같은 기능을 찾을 것입니다. ML 연구자/현업 전문가는 심층적인 확률론적 모델을 지정하고 학습하기 위한 강력한 빌딩 블록을 찾을 것입니다. 이 강연에서는 핵심적인 TFP 추상화를 소개하고 모델링 능력과 편리성을 보여주는 몇 가지 예를 시연합니다.
Deep learning for fundamental sciences using high-performance computing(고성능 컴퓨팅을 사용하는 기초과학용 딥 러닝)
(입자물리학과 우주론을 비롯한) 기초과학 연구 분야에서는 우주의 비밀을 밝혀내기 위해 복잡한 측정 기기에서 엑사바이트 규모의 방대한 데이터를 생성하고 분석합니다. 이 분야에서 딥 러닝을 도입하면서 이전에 가능했던 것보다 높은 측정기준에서 측정 기기 데이터를 직접 활용함으로써 새로운 발견을 위한 측정 민감도를 개선할 수 있습니다. 이 강연에서는 초청 연사인 Wahid Bhimji(
NERSC
)가 이 분야에서 이루어지고 있는 최근의 활동을 설명하며, 특히 로렌스버클리국립연구소(Berkeley National Lab)를 기반으로 한 미국 기초과학의 미션 슈퍼컴퓨팅 센터인 NERSC에서의 활동을 소개합니다. 이 연구에서는 새로운 메서드와 애플리케이션을 탐색하고, 고성능 컴퓨팅 스케일을 이용하고, 기초과학을 위한 생산적인 딥 러닝 환경을 제공하기 위해 Tensorflow를 이용하고 이를 기반으로 빌드합니다.
Tensor2Tensor
Tensor2Tensor는 변환, 파싱, 이미지 캡션 등과 같은 다양한 ML 애플리케이션용 최첨단 모델을 쉽게 만들고, 이전보다 훨씬 빠르게 다양한 아이디어를 탐색할 수 있게 해주는 딥 러닝 모델 및 데이터세트로 구성된 라이브러리입니다.
Distributed TensorFlow(분산형 TensorFlow)
이 강연에서는 Keras 상위 레벨 API를 사용하여 분산형 TensorFlow 교육을 수행하는 방법을 시연합니다. 담당 팀이 TensorFlow의 분산형 아키텍처, Kubeflow와 Kubernetes를 사용하여 분산형 클러스터를 설정하는 방법, Keras에서 만든 모델을 배포하는 방법을 안내합니다.
강화 학습을 통한 오픈 소싱 액티브 질문 재공식화
2019년 1월 24일 목요일
<블로그 원문은
이곳
에서 확인하실 수 있습니다>
게시자: 소프트웨어 엔지니어 Michelle Chen Huebscher, 뉴욕 대학 박사 과정, Google AI 언어 소프트웨어 엔지니어 인턴 Rodrigo Nogueira
기계 번역
,
문장 구성
,
의미
분석
등
에 적용되는
자연어 이해
는 현재 진행 중인 Google AI 연구 조사의
주요 초점
입니다. 무엇보다 사용자의 질문에 직접적으로 대답할 수 있는 기능이 대화 기술에 점점 더 많이 요구됨에 따라, Google이 추구하고 있는 가장 활발한 연구 분야 중 하나는 인간 대화의 기본적인
구성 요소
인 질문 답변(QA)입니다.
오픈 소싱 코드는 재현 가능한 연구 조사의 중요 구성 요소이므로 Google은 질문 답변을 위한 인공 에이전트 학습에
강화 학습
의 활용 방안을 탐구하는 연구 조사 프로젝트인
액티브 질문 답변용(ActiveQA) TensorFlow 패키지
를 선보입니다.
ICLR 2018
논문 “
올바르게 질문하기: 강화 학습을 통한 액티브 질문 재공식화
”에 처음으로 소개된 ActiveQA는 더 나은 대답을 제공한다는 목표를 가지고 자연어를 사용하여 QA 시스템과 상호 작용합니다.
Active 질문 답변
전통적인 QA에서는
관리된 학습 기술
이 임의로 입력된 질문에 답하는 시스템을 학습하기 위해 라벨로 지정된 데이터와 함께 사용됩니다. 이는 효과적이지만 질문을 재공식화하고 여러 번 검색을 실행하여 반응을 평가하고 종합하므로 인간처럼 불확실성에 대처할 수 있는 능력 부족으로 인한 어려움이 있습니다. "올바르게 질문을 하는" 인간의 능력에서 아이디어를 얻은 ActiveQA는 QA 시스템을 반복적으로 조사하는 에이전트를 도입합니다. 이렇게 함으로써 에이전트는 원래의 질문을 여러 번 재공식화하여 가장 좋은 답변을 찾아내 수 있습니다. 이 접근 방식은 에이전트가 QA 시스템과 동적인 상호작용을 하기 때문에 액티브라고 하며, 회신 답변의 품질을 개선하는 것이 목표입니다.
"
Tesla는 언제 처음 생겼나요
?"와 같은 질문을 예로 들어 보겠습니다. 에이전트는 다음 두 가지 방식으로 질문을 재공식화합니다. "
Tesla의 설립일
" 및 "
Tesla 설립연도
". 그리고 QA 시스템에서 두 질문에 대한 답변을 모두 가져옵니다. 이 정보를 모두 활용하여 "
1856년 7월 10일
"을 답변으로 결정하게 됩니다.
ActiveQA 시스템의 특징은 좋은 답변으로 유도하는 질문을 하도록 학습한다는 것입니다. 그러나 원래 질문과 보다 효과적인 변형의 쌍으로 이루어진 질문 형태에서는 학습 데이터를 쉽게 사용할 수 없기 때문에 ActiveQA는 학습 에이전트와 관련이 있는 머신러닝의 접근 방식인
강화 학습
을 활용하여 환경과의 상호작용을 통해 보상을 최대화하는 작업을 수행하게 됩니다.
이 학습은 ActiveQA 에이전트가 QA 시스템과 상호 작용할 때 이루어지며, 각 질문의 재공식화는 해당 답변이 얼마나 우수한지, 즉 보상의 구성으로 평가됩니다. 답변이 좋으면 학습 알고리즘이 모델의 매개변수를 조정하여 답을 유도하는 질문 재공식화가 다시 이루어질 가능성이 더 높아지고 답변이 좋지 않으면 가능성이 낮아집니다.
논문
에서는 그러한 에이전트들이 더 나은 질문을 함으로써 재공식화에 답변을 제공한 기본 QA 시스템을 능가하도록 훈련될 수 있다는 것이 나타나 있습니다. QA 시스템은 관리 학습으로 이미 동일한 과제를 해결하도록 훈련되었기 때문에 이는 중요한 결과입니다. 본 연구 조사의 또 다른 주목할만한 결과는 ActiveQA 에이전트가 상당히 정교하고 여전히 해석 가능한 재공식화 전략을 학습할 수 있다는 것입니다(강화 학습의
정책
). 학습된 정책은
tf-idf 쿼리 용어 가중치 재부여
와 같은 잘 알려진 정보 검색 기술을 활용합니다. 이는 일반 용어보다 더 많은 정보를 제공하는 용어들에 가중치가 부여되는 프로세스이자
단어의 어간을 추출(워드 스태밍)하는
기능입니다.
자체 ActiveQA 시스템 구축
Google이 선보이는 TensorFlow ActiveQA 패키지는 세 가지 주요 구성 요소로 이루어져 있으며 ActiveQA 에이전트를 학습시키고 구동하는데 필요한 모든 코드가 포함되어 있습니다.
질문을 입력으로 해석하여 공식화로 복귀하는 사전 학습
시퀀스 투 시퀀스
모델 이 작업은 영어에서 영어로 번역하는 기계 번역과 유사하며, 실제로 초기 모델은 일반적인 페러프레이징에 사용될 수 있습니다. 이를 구현하기 위해 Google은
TensorFlow 인공 신경망 번역 가이드 코드
를 사용 및 맞춤화합니다. 정책 구배법을 사용하여 강화 학습을 통한 학습을 지원하는 코드를 조정했습니다.
*
답변 선택
모델. 답변 선택기는
복잡한 신경망
을 사용하여 원래의 질문, 재공식화 및 답변, 이 세 가지에 점수를 부여합니다. 선택기는 사전에 학습되며 공개적으로 사용 가능한 단어 삽입(
GloVe
)을 활용합니다.
질문 답변
시스템(
환경
) Google은
Seo 외(2017)
의 논문에 설명된 바와 같이 유명한 질문 답변 시스템인
BiDAF
를 이 목적으로 사용합니다.
또한 학습된 모든 모델의 체크 포인트에 대한 포인터를 제공합니다.
Google의 사명은 전 세계의 정보를 조직화하여 그 정보를 유용하고 보편적으로 접근할 수 있게 만드는 것입니다. 그리고 ActiveQA가 그 사명을 실현하는 데 있어 중요한 단계라고 믿습니다. Google은 이 연구 조사가 더 우수하고 해석 가능한 답변을 제공하는 시스템 설계에 도움이 될 것이라고 생각합니다. 그리고 이 연구 조사가 자연어를 사용하여 세계와 상호작용할 수 있는 시스템을 개발하는 이들에게 도움이 되기를 바랍니다.
감사의 말
본 연구 조사 및 발간에는 Alham Fikri Aji, Christian Buck, Jannis Bulian, Massimiliano Ciaramita, Wojciech Gajewski, Andrea Gesmundo, Alexey Gronskiy, Neil Houlsby, Yannic Kilcher, Wei Wang이 도움을 주셨습니다.
*
본 논문에 보고된 시스템에는
Britz 외(2017)
논문에 사용된
TensorFlow 시퀀스 투 시퀀스 코드
를 이 목적으로 사용합니다. 이후
Google 번역 모델(GNMT)
의
오픈 소스 버전
이 가이드로
공개
되었습니다. 오늘 출시된 ActiveQA 버전은 보다 최신이며 적극적인 개발 구현을 기반으로 합니다. 이러한 이유로 출시된 시스템은 논문과 다소 다릅니다. 하지만 성능과 동작은 질적 및 양적으로 유사합니다.
↩
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed