코드 개발에 적용된 머신 러닝


17

저의 배경은 기계 공학에 관한 것이므로이 분야에 대한 무지를 용서해주십시오.

저는 프로그래밍과 소프트웨어 개발을 정말 좋아합니다. 또한 최근에 무료 온라인 기계 학습 (ML) 수업을 수강했으며, 스탠포드 교수 Andrew Ng가 강의하는 것이 좋습니다. 여기에 링크 하십시오 .

이 교수는 ML이 결코 영향을 미치지 않을 영역을 찾는 것이 어렵다고 말합니다.

질문

그래서 제 질문은 코드 학습에 머신 러닝을 적용하기 위해 지금까지 어떤 연구를 수행 했습니까? 디버깅은 어떻습니까?

가능하면 자원 / 자원 / 과학 논문을 포함하십시오.

ML 소프트웨어 개발 (또는 프로그래밍)을 자주 검색 하면 ML 응용 프로그램의 소프트웨어 개발 (또는 프로그래밍) 결과가 나오기 때문에 운이 좋았 습니다.


코드를 작성하는 코드에 대한 질문이 있습니까, 아니면 기계 학습을 구현하기위한 코딩 기술에 대해 질문하십니까?
Robert Harvey

코드를 작성하거나 코드를 개선하거나 코드의 실수를 확인하는 코드 (ML 코드) (웹 개발, 수치 솔버 등). 기계 학습을 구현하는 기술이 아닙니다.
Charles

말할 필요도 없지만 고급 프로그래밍 언어는 화학적으로 활성화 된 제어 장치가 느린 사람에게 컴퓨터 명령을 더 쉽게 제공하도록 설계되었습니다. 가장 기본적인 수준에서 ML은 수행해야 할 작업을 결정하는 시스템입니다. 미래에는 물백을 위해 고안된 언어가 인간만큼 불필요 할 것입니다.
JimmyJames

이 질문은 인공 지능 사이트로 옮겨 져야합니다.
Quintumnia

이것은 실제로 정말 멋진 질문입니다!
Rhys Johns

답변:


6

퍼징 은 머신 러닝을 적용 할 수있는 테스트 방법입니다. 퍼징은 자동 탐색 테스트 영역에서 테스트하는 방법입니다. 많은 수의 입력을 실행하고 오류를 찾아 소프트웨어의 결함을 찾습니다. 처리되지 않은 예외는 가장 간단한 범주이지만 스마트 구현에서는 ML을 사용하여 의심스러운 출력을 찾을 수 있습니다. 그러나 프로세스를보다 효율적으로 만들기 위해이 영역에서 ML이 주로 사용됩니다. 이것은 "흥미로운"입력에 대한 교육으로 가능한 모든 입력을 테스트하지 않도록 ML을 사용하여 작동합니다. (실패의 원인이 될 수있는 다른 입력입니다.)


흥미 롭군 이런 종류의 코드 테스트 범주에 해당합니다. RJB의 답변은 테스트보다는 개발과 관련되어 있기 때문에 조금 더 좋습니다. 그러나 테스트 / 디버깅은 여전히 ​​유용합니다.
Charles

네. 그것은 확실히 테스트 영역에 있으며 충분한 사람들이 시도하지는 않았지만 클라우드 컴퓨팅이 점점 더 정상화되면서 실행 가능한 기술로 모멘텀을 얻고 있습니다. 머신 클러스터를 확보하고 일주일 동안 테스트를 실행 한 후 다음 번에 클러스터를 폐기하는 것이 쉬워졌습니다.
RubberDuck

4

예. 이 지역은 지금 더워요. "빅 코드"라고하며 DARPA는 4 천만 달러를 http://www.darpa.mil/program/mining-and-understanding-software-enclaves에 넣었습니다 . Fan Long의 선지자 및 창세기 시스템과 같은 인상적인 결과는 학습 된 올바른 패치 모델을 사용하여 프로그램의 버그를 자동으로 수정할 수 있습니다. Martin Vechev와 그의 학생 Veselin Raychev도이 분야의 선구자였습니다. 아마도 가장 인상적인 결과는 "JavaScript 코드를 최소화 할 수있는 JSNice ( http://jsnice.org/ )"일 것입니다.

전체적으로 빅 코드의 아이디어는 약속에 미치지 못했습니다. 데이터는 변수 이름보다 훨씬 흥미로운 것을 배우기에는 너무 희박합니다. 이 DARPA 프로그램에 의해 여전히 부분적으로 자금이 지원되지만 실험실은 대부분 그 작업을 중단했습니다. 그 노트에서 DeepCoder에 대해 마지막으로 들었던 것은 프로그램 합성 분야의 최신 기술과 비교할 때 상당히 심오한 결과를 얻는다는 것입니다.

자동화 된 프로그래밍을위한 가장 성공적인 도구는 여전히 SMT 솔버와 같은 비 ML 방법에 의존합니다. PL 회의 (예 : PLDI, POPL, OOPSLA) 또는 학술 소프트웨어 엔지니어링 회의 (예 : ICSE, FSE, ISSTA, ASE)의 진행 상황을 살펴보면 많은 예를 볼 수 있습니다.


3

Microsoft는 특정 입력 및 출력에서 ​​분석법 본문을 예측하기 위해 딥 러닝을 사용 하는 DeepCoder 를 개발 하고 있습니다. 그것이 내가 아는 유일한 예입니다.

나는 당신을 말할 수있는 메타 유전 프로그래밍이 비슷한 야망 연구 분야이지만, 나는 지식이 그것에 대해 충분히 알고 말할 수 없습니다.

2015 년 뉴스에서 muScalpel 은 하나의 프로그램에서 다른 프로그램으로 피처를 이식하는 솔루션을 발전 시켰으며, 둘 다에 대한 단위 테스트를 훈련 세트로 사용했습니다.


이것은 유전자 모델을 사용하여 알고리즘을 생성하는 것과 같습니다. 코드 개발을 지원하는 응용 프로그램을 알고 있습니까? 나는 순수한 기계 중심 (유전 기반 모델)보다는 인간 기계가 함께 작동하는 것을 생각하고 있습니다. 나는 이것이 특정하게 들릴지 모른다는 것을 알고 있지만, 나는이 분야에 익숙하지 않기 때문에 주로 궁금합니다.
Charles

ML이 ML을 사용하여 ML을 사용하는 것에 대해 너무 재귀 적으로 생각하고 있습니다. :) #edited
RJB

2

그래서 제 질문은 코드 학습에 머신 러닝을 적용하기 위해 지금까지 어떤 연구를 수행 했습니까? 디버깅은 어떻습니까?

관련된 질문은 코드 생성 및 컴파일을위한 머신 러닝 기술에 관한 것입니다 ( 여기서는 트랜스 파일러컴파일러 가 자동으로 "코드를 작성하는"(일부 고급 언어의 코드 작성) 방법으로 상상할 수 있기 때문에 ).

MILEPOST GCC 와 같은 몇 가지 논문이 있습니다 .

디버깅 또는 정적 소스 코드 분석 (또는 모든 종류의 정적 프로그램 분석 )을 위한 머신 러닝 기술에 대한 논문을 Google에서 볼 수도 있습니다 .

질문과 관련된 인공 지능 부트 스트랩에 관한 J.Pitrat의 블로그를 참조하십시오 .


1

수학을 사용하여 돈을 버는 것에 대한 ACM 커뮤니케이션즈의 최근 기사에서 시스템 및 인프라 그룹의 Google 선임 연구원 인 Jeff Dean을 인용했습니다.

구글이 오늘 처음부터 새로 만들어 졌다면, 코드가 아닌 많은 것들이 배우게 될 것이다.

이 기사는 연구 분야의 최근 활동에 대한 개요를 제공합니다. 그것은 지불 벽 뒤에 있지만 코딩과 기계 학습 / 통계 사이의 이론적 유사점에 관심이 있다면 읽을 가치가 있습니다. 기사 끝에있는 참조 목록도 도움이 될 수 있습니다.

예를 들어이 기사는 웹에 대한 확률 적 프로그래밍 인 WebPPL을 참조합니다 .


0

다음은 머신 러닝을 사용하여 마이크로 서비스를 디버깅하는 사용 사례입니다. 기계 학습을 통해 마이크로 서비스 성능 데이터를 분석하는 데있어 몇 가지 노력을 문서화 했으며 마이크로 서비스로드 테스트에서 수집 한 성능 데이터에서 의사 결정 트리를 훈련 한 다음 환경 문제에 대한 통찰력을 제공하고 성능 버그를 진단하고 수정하는 데 도움이되는 트리를 연구했습니다.


0

모든 코딩 관련 머신 러닝 주제에 대한 광범위한 읽기 목록을 찾았 습니다 .

보시다시피 사람들은 코딩에 머신 러닝을 적용하려고 시도했지만 모든 방식의 코딩 또는 디버깅을 처리 할 수있는 머신이 아니라 항상 매우 좁은 분야에 있습니다.
이 답변의 나머지 부분은 상대적으로 넓은 범위의 "디버깅"시스템과 이것이 실제로 시도되지 않은 이유 (주제에 대한 나의 연구가 보여주는 한)에 초점을 맞추고 있습니다.


나는 답변의 긴 부분을 수정했습니다. 요약하면 (다음 부분에서 중요합니다) : 현재 기계 학습 방법론, 인간이 배울 수있는 것, 기계도 할 수 있습니다. 우리는 물리적 영역 (CPU 속도, 머신의 크기 등)에 의해서만 제한되며 학습 알고리즘 자체의 적용 가능성은 제한되지 않습니다.

코드 학습에 머신 러닝을 적용하기 위해 지금까지 어떤 연구가 수행 되었습니까? 디버깅은 어떻습니까?

여기서 문제는 불가능한 것이 아니라 매우 복잡한 주제라는 것입니다.

인간은 모든 사람이 동의하는 보편적 인 코딩 표준을 정의하는 데 근접하지 않았습니다. SOLID와 같이 가장 널리 동의 된 원칙조차도 얼마나 깊이 구현 해야하는지에 대한 토론의 원천입니다 . 모든 실질적인 목적을 위해 재정적 또는 시간적 제약이없는 한 SOLID를 완벽하게 준수하는 것은 불가능합니다. 대부분의 개발이 이루어지는 민간 부문에서는 불가능합니다. SOLID는 가이드 라인이며 하드 제한이 아닙니다.

옳고 그름에 대한 객관적인 측정치가 없다면 어떻게 기계에게 긍정적 / 부정적 피드백을 제공하여 학습하게 할 수 있을까요?
기껏해야 많은 사람들이 기계에 대한 자신의 의견을 제시하도록 할 수 있으며 ( "이것은 좋은 / 나쁜 코드입니다") 기계의 결과는 "평균적인 의견"이 될 것입니다. 그러나 반드시 올바른 솔루션 과 같을 필요는 없습니다 . 가능하지만 보장되지는 않습니다.

둘째, 특히 디버깅의 경우 특정 개발자가 특정 유형의 버그 / 실수를 도입하는 경향이 있음을 인식하는 것이 중요합니다. 실수의 특성은 경우에 따라 실수를 도입 한 개발자의 영향을받을 수 있습니다.

예를 들어, 직장에서 다른 사람의 코드를 버그 수정하는 일에 자주 관여하기 때문에 각 개발자가 어떤 종류의 실수를 저지르는지를 기대합니다. 특정 문제가 발생하면 dev A는 구성 파일 업데이트를 잊어 버릴 수 있지만 dev B는 종종 잘못된 LINQ 쿼리를 작성합니다. 개발자를 기반으로 구성 파일이나 LINQ를 먼저 살펴볼 수 있습니다.
마찬가지로, 저는 현재 여러 회사에서 컨설턴트로 근무했으며 특정 유형의 회사에 버그 유형이 바이어스 될 수 있음을 분명히 알 수 있습니다. 결정적으로 지적 할 수있는 것은 어렵고 빠른 규칙은 아니지만 명확한 추세가 있습니다.

기계가 이것을 배울 수 있습니까? 개발자 A가 구성을 망칠 가능성이 높고 개발자 B가 LINQ 쿼리를 망칠 가능성이 높다는 것을 알 수 있습니까? 물론 가능합니다. 내가 전에 말했듯이, 인간이 배울 수있는 것, 기계도 할 수있는 것.
그러나 기계에게 모든 가능성을 가르쳤다는 것을 어떻게 알 수 있습니까? 어떻게 (전역이 아닌) 작은 데이터 세트를 제공하고 그것이 전체 버그의 스펙트럼을 나타내는 지 어떻게 알 수 있습니까? 아니면 보편적으로 사용할 수있는 디버거를 만드는 대신 특정 개발자 / 회사를 돕기 위해 특정 디버거를 만들겠습니까?

머신 러닝 디버거를 요청하는 것은 머신 러닝 Sherlock Holmes를 요청하는 것과 같습니다. 아마도 하나를 만드는 것이 불가능하지는 않지만, 종종 주관적 평가에 따라 디버거 / 셜록이되는 핵심 추론은 매우 다양하고 다양한 지식 / 가능한 결함에 대해 다루고 있습니다.
빠르게 입증 할 수있는 정확한 / 부정확 한 결과가 없기 때문에 기계를 쉽게 가르치고 좋은 진전을 보이고 있는지 확인하기가 어렵습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.